Autor
|
Tema: Batch, reiniciar programa luego que detecte que no haya Internet (Leído 4,847 veces)
|
BALTA00
Desconectado
Mensajes: 35
|
Buenas noches, tengo un programa que hace función de Proxy, trabaja perfecto, pero cuando tengo problemas de conexión si se me va y llega el Internet el proxy deja de reconectar, para evitar eso, hice lo siguiente: @echo off :inicio if exist testigo.txt del testigo.txt set ERRORLEVEL = ping -n 1 www.google.com > testigo.txt rem La solicitud de ping no pudo encontrar el host echo Comprobando conectividad ... @find /C "La solicitud de ping no pudo encontrar el host" testigo.txt > null rem find /C "recibidos = 0" testigo.txt rem si errorlevel = 0 ha encontrado recibidos=0 lo cual indica que no hay conectivida if %ERRORLEVEL%==0 goto reiniciar else goto continua
:continua color 17 echo Si hay conectividad rem delay de 60seg @ping -n 15 127.0.0.1 > null goto inicio :reiniciar color 16 echo Se fue el Internet echo Esperando que llegue para reiniciar el proxy if exist testigo.txt del testigo.txt set ERRORLEVEL = ping -n 1 www.google.com > testigo.txt rem La solicitud de ping no pudo encontrar el host echo Comprobando conectividad ... @find /C "La solicitud de ping no pudo encontrar el host" testigo.txt > null rem find /C "recibidos = 0" testigo.txt rem si errorlevel = 1 ha encontrado recibidos=1 lo cual indica que ya hay Internet if %ERRORLEVEL%==1 goto restablecer else goto reiniciar
:restablecer TASKKILL /IM eth-proxy.exe /F echo ETH-Proxy cerrado, esperenmos 3 segundos y lo abriremos de nuevo timeout /t 3 /nobreak
START "ETH-Proxy" "eth-proxy.exe" goto inicio Se supone que debería chequear cada minuto si hay conexión, sino hay conexión pasa a la sentencia reiniciar, que ahí debería chequear cuando llegue la conexión, y en lo que llegue debería matar el proceso eth-proxy.exe y volverlo a iniciar, y continuar chequeando si hay o no conexión, el detalle es que no me funciona, simplemente abra y cierra el proceso de manera continua, ¿Qué estoy haciendo mal?
|
|
« Última modificación: 19 Abril 2016, 06:13 am por BALTA00 »
|
En línea
|
|
|
|
|
BALTA00
Desconectado
Mensajes: 35
|
Encontré una forma, acabo de editar el post, ahora necesito ayuda porque no funciona lo que hice...
|
|
|
En línea
|
|
|
|
Zomkar
Desconectado
Mensajes: 180
|
No veo fallos, pero puedes probar a detectar donde están usando pause y echo, si no se llega a ejecutar o falla en algun punto. Si es otro problema, que error te da? Por otra parte la cosa seria: :comprobar conexion si hay conexion goto continuar else goto reiniciar
:continuar (esperar y comprobar conexion)
:reiniciar matar tarea y iniciarla goto: comprobar conexion
De esta forma simplificas el codigo, solo hay que comprobar conexion una vez. La funcion que pusiste que detecta si ya hay internet la quitaria ya que si no hay internet tampoco es un problema que mates el proceso. PD: he visto algo @find /C "La solicitud de ping no pudo encontrar el host" testigo.txt > null Esto no funcionará si ping da este mensaje: Tiempo de espera agotado para esta solicitud. Deberías usar el que tienes justo debajo el de "recibidos = 0" que tiene REM delante (comentario). Aparte quita los "set ERRORLEVEL=", no es necesario y se desaconseja: You should never attempt to write to the %ERRORLEVEL% variable because the value you set will then take precedence over the internal ERRORLEVEL.
http://ss64.com/nt/errorlevel.html
|
|
« Última modificación: 19 Abril 2016, 06:44 am por Zomkar »
|
En línea
|
|
|
|
BALTA00
Desconectado
Mensajes: 35
|
Así como dices: @echo off :inicio if exist testigo.txt del testigo.txt set ERRORLEVEL = ping -n 1 www.google.com > testigo.txt rem La solicitud de ping no pudo encontrar el host echo Comprobando conectividad ... @find /C "La solicitud de ping no pudo encontrar el host" testigo.txt > null rem find /C "recibidos = 0" testigo.txt rem si errorlevel = 0 ha encontrado recibidos=0 lo cual indica que no hay conectivida if %ERRORLEVEL%==0 goto reiniciar else goto continua :continua color 17 echo Si hay conectividad rem delay de 1min @ping -n 60 127.0.0.1 > null goto inicio :reiniciar
TASKKILL /IM eth-proxy.exe /F echo ETH-Proxy cerrado, esperenmos 3 segundos y lo abriremos de nuevo timeout /t 3 /nobreak
START "ETH-Proxy" "eth-proxy.exe" goto inicio funciona, solo que cuando no hay conexión cierra y abre el proceso constantemente, no es en realidad un problema muy grande, pero es medio incómodo.
|
|
|
En línea
|
|
|
|
Zomkar
Desconectado
Mensajes: 180
|
Mmmm y si le aumentas el valor de: Y sino, puedes poner un ping -n >nul. O más facil, al final de :reiniciar pon goto continua. Si quieres que realmente solo lo mate en cuanto vuelva la conexion si que tendrias que hacerlo de una forma similar a como lo tenias. :reiniciar esperar X segundos Si no hay conexion goto reiniciar matar tarea goto inicio El resto de codigo seria el mismo, tendrias que volver a copiar la funcion comprobar conexion aqui, así creas un bucle del que se sale si hay conexion.
|
|
|
En línea
|
|
|
|
Eleкtro
Ex-Staff
Desconectado
Mensajes: 9.885
|
Eso es totalmente inapropiado y erroneo, es un claro ejemplo de malas prácticas de uso. - La variable ERRORLEVEL ya está definida de forma nativa, es una variable dinámica, no necesitas redeclararla.
- Si declaras una variable usando un mismo nombre de variable dinámica, lo único que vas a conseguir es sustituir la variable dinámica por tu variable local (por lo que jamás obtendrás el valor de la variable dinámica).
- Entre el nombre de la variable y el símbolo de asignación de valor (=) no debe existir ningún espacio, por que de lo contrario ese espacio se suma al nombre de tu variable, esto quiere decir que el nombre real de tu variable es "ERRORLEVEL ", no "ERRORLEVEL". Esto quiere decir además que en tu código nunca estás accediendo a tu variable local, sino a la variable dinámica.
- Aparte de lo mencionado, deberías encerrar entre comillas dobles el nombre y el valor de la variable para prevenir otros tipos de errores (de sintaxis):
(lo mismo se aplica a variables numéricas)[/li]
En resumen, debes eliminar esa variable, por que aparte de no necesitarla tampoco le estás dando ningún uso (ni podrías dárselo correctamente con la intención de sustituir la variable dinámica y aun así esperar obtener el mismo valor...) Saludos.
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Hacer un programa que anule internet y luego pueda aplicarlo a otros ordenadores
Programación Visual Basic
|
nyigu
|
3
|
2,605
|
9 Octubre 2006, 12:36 pm
por nyigu
|
|
|
Programa batch para actualizar ficheros por Internet
Scripting
|
meriadoc2002
|
2
|
4,335
|
14 Septiembre 2007, 10:18 am
por ROSITAAA
|
|
|
API para que el programa detecte si esta abierto un proceso antes de continuar
Programación Visual Basic
|
Franqox
|
9
|
9,720
|
23 Diciembre 2010, 20:54 pm
por BlackZeroX
|
|
|
Facebook niega que haya existido un fallo de seguridad que haya dejado miles ...
Noticias
|
wolfbcn
|
6
|
4,209
|
27 Septiembre 2012, 15:29 pm
por d(-_-)b
|
|
|
Exe no abren luego de reiniciar
Windows
|
Tacamine
|
7
|
3,546
|
7 Febrero 2017, 17:56 pm
por Randomize
|
|