¿Cómo hago un archivo .bat que genere un archivo .txt con los resultados de un ping?

Tengo un proyecto de un programa .bat que me permita saber si un juego online me va a ir lento o no antes de jugarlo para así evitar perder, mi idea es un programa que haga ping al servidor para ver la latencia y que dependiendo de esta lo abra o no, para esto pensaba en hacer que el bat mande los resultados del ping a un .txt, después lea estos resultados y dependiendo de la latencia, ejecute o no el juego.

Hasta ahora he usado este

Color 0a
@echo off
Title PingLol
Cls
Echo Hola Luis.
¿Echo Vas a jugar?
Echo Primero mira si hay lag.
Echo .
Ping lan.leagueoflegends.com
Ping lan.leagueoflegends.com
Ping lan.leagueoflegends.com
Echo .
Echo .
Echo .
Echo Presiona cualquier tecla para jugar
Echo o cierra la app si hay mucho lag.
Pause
cd C:\Riot Games\League of Legends
LeagueClient.exe

que lo que hace es mandar 3 pings y dependiendo de este, si no había mucha latencia, apretaba cualquier botón y corría el juego y si había latencia, sólo lo cerraba manualmente y ya, pero dada la cuarentena y el aburrimiento, me pareció interesante el proyecto de automatizarlo.

Cualquier ayuda será muy bien recibida :)

1 respuesta

Respuesta
1

Tu consulta habla de generar un archivo TXT con los resultados de un ping, para lo que bastaría con el comando

PING <destino> > resping.txt

Donde <destino> sería la "URL/nombre" o la IP del destino y RESPING.TXT el nombre del archivo que recogería los resultados del PING.

Pero me he permitido "leer entre líneas" y creo que estás buscando algo más parecido a lo que haría este bat:

@echo off
Cls
Color 0A
Title Lanza LOL si hay poco retardo
Setlocal EnableDelayedExpansion
set /a maxret=5
set /a nping=10
set destino=lan.leagueoflegends.com
Echo ------------------------------------
echo - Lanza LOL si retardo menor que %maxret% -
echo ------------------------------------
echo.
echo Espera estimada en la interrogaci¢n al destino: %nping% segundos
for /f "tokens=6 delims== " %%x in ('ping -n %nping% %destino% ^| find "ximo"') do (
   set tmp=%%x&set tmp=!tmp:~0,-3!&echo Retardo m ximo medido !tmp! ms
   if !tmp! gtr %maxret% echo El retardo es superior al m ximo. Se aborta el lanzamiento&pause>nul&goto :EOF
   echo Retardo v lido. Seguimos adelante
   )
set archivo=LeagueClient.exe
set carpeta=C:\Riot Games\League of legends
pushd %carpeta%
%Archivo%
Popd
Echo Se ha ejecutado el archivo %archivo%
Pause>nul

Como ves he creado variables para el tiempo máximo de retardo admitido, el número de interrogaciones ping al destino, el nombre del destino, el de la carpeta que contiene el ejecutable y el nombre del ejecutable. El FIND incluido en el FOR depende del texto que saque el PING, que a su vez depende de la configuración de idioma. Te pongo aquí un pantallazo de mi entorno de pruebas para que entiendas porque aparece FIND "ximo" y los cambios que tendrías que hacer en caso de que tu texto fuera diferente:

Otra cosa. Supongo que ya sabes que el juego de caracteres de MSDOS es diferente del de Windows. Esa es la razón por la que las letras acentuadas del idioma español (y algunas otras como la eñe) se ven distintas en las ventanas Windows. La a acentuada se ve como un espacio en el BAT anterior (tanto en "válido" como en "máximo") pero en realidad es el ASCII 160. A veces el editor de la página "estropea" estos caracteres y puede no resultar sencillo restaurarlos.

¡Gracias! 

Ahora estoy aprendiendo sobre todo lo que usaste ahí, mi conocimiento es super bajo en torno a MSDOS, pero gracias a ti y tus respuestas a mis preguntas, aprendo full, qué bueno que hayan personas como tú en internet.

Hola de nuevo, me surgió un problema, en el Pinglol me muestra una latencia diferente al bat que tú me muestras

 

¿A qué crees que se deba?

 nota: cambié la ubicacion del archivo para poder hacer pruebas sin que se ejecute el juego, por eso bota ese error el en LanzaLOL

A lo mejor no está bien hecha la obtención del valor máximo y en lugar de 77 se queda solo con 7. Añade un ECHO de depuración para que te muestre lo que se obtiene en la variable %%x. Pon

Echo %%x

Delante de la línea que empieza por

set tmp=%%x

Y tal vez otro ECHO detrás de ella. En este caso podría ser

Echo !tmp!

Así podemos ver como está trabajando el BAT.
Si no llegas a ninguna conclusión copia por aquí el BAT a ver si yo veo algo.

¡Gracias! 

ya con eso me muestra bien todo, muchas gracias :)

Pero entonces, ¿no había nada mal?

no, ya con eso me muestra bien, el problema era que me mostraba la latencia, pero con un número menos

ej: 70ms cuando eran 700ms

pero ya me muestra bien, modifiqué también el valor máximo de latencia a 150 y ya funciona 10/10

muchas gracias!

Ya he descubierto la razón, en realidad, el error. Mi intención en el BAT era tomar el valor máximo de la línea detectada. Por ejemplo los 10 ms en

    Mínimo = 3ms, Máximo = 10ms, Media = 5ms

Pero tal como está definido el FOR, con delimitadores "=" y espacio:

for /f "tokens=6 delims== " %%x in ('ping -n %nping% %destino% ^| find "ximo"')

los campos son, por orden:

Mínimo
3ms,
Máximo
10ms,
Media
5ms

Por tanto el sexto campo (en este caso 5ms) no lleva la coma incluida, que era la razón del -3 en el comando:

   set tmp=%%x&set tmp=!tmp:~0,-3!&echo Retardo m ximo medido !tmp! ms

Con esto se asignaría a la variable TMP un valor vacío o, en otros casos, el que resulta de borrar la última cifra.

Creo que al contar campos contaba el "=" como uno de ellos y por eso me salía que el valor del Máximo era el sexto cuando en realidad era el cuarto.

Total, que habría que corregir el FOR para que diga:

for /f "tokens=4 delims== " %%x in ('ping -n %nping% %destino% ^| find "ximo"') do (

Wow, si que sabes mucho, podrías explicarme para qué sirve lo de tokens?

ya que insistes ;-)

El parámetros TOKENS del FOR está relacionado con el parámetro DELIMS. Empezaré por decir que la unidad de tratamiento de un FOR es la "línea". Dentro de cada línea tratada se revisa la aparición de los caracteres especificados en el parámetro DELIMS, si figura explícitamente (en caso contrario los caracteres por defecto son el espacio, ASCII 32, y el tabulador, ASCII 9). Con esos delimitadores se van contando los campos, TOKENS, de la línea y el parámetro TOKENS indica cuales de ellos nos interesan y, por tanto, cuales vamos a ir asignando secuencialmente a las variables. El TOKEN * indica que a la siguiente variable se le asigna el resto de la línea.

Por ejemplo, al tratar la línea que puse más arriba:

  Mínimo = 3ms, Máximo = 10ms, Media = 5ms

con el siguiente FOR

for /f "tokens=1,3,4,* delims== " %%p in ('ping -n %nping% %destino% ^| find "ximo"')

los valores asignados serían:

%%P valor "Mínimo"
%%Q valor "Máximo"
%%R valor "10ms,"
%%S valor "Media = 5ms"

Algunas precisiones respecto a lo anterior: los espacios que preceden en la línea al primer carácter distinto de espacio no se tienen en cuenta y si se dan dos delimitadores juntos solo se considera uno.

De todas formas si en una ventana CMD tecleas FOR /? te saldrá la ayuda para el comando FOR y para el resto de los comandos de MSDOS si utilizas el mismo "truco" con los otros comandos.

Si ya todo está en orden puedes cerrar la consulta. Eso no significa que no puedas seguir usando este hilo para tratar algún otro aspecto sobre el que tengas dudas.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas