Hoy vamos a ver un tip para complementar el comando ping, es que estaba necesitando hacen un test a un equipo de red y verificar si tenía cortes, pero saber en que hora y minuto exacto se podía llegar a producir un corte, así que acá va.

La idea es hacer un archivo .bat simple que contenga lo siguiente.

@echo off
setlocal

for /F "delims=" %%i in ('ping 172.16.0.1 -t') do call :format "%%i"
goto :done

:format
echo %date% %time% %1 1>> test1.txt

:done

Lo único que debes cambiar es después de ping la IP que querés monitorear y el nombre del archivo donde se guardará, que en mi caso es test1-txt. Esto lo hice con un bloc de notas y luego le cambie la extensión del archivo a test.bat.

Se usa corriendo el ejecutable y una vez que ya no se va a usar más le damos una sola vez Ctrl+C nos dirá para interrumpir el proceso le damos a N y nos pide presionar una tecla para continuar por cada registro, así que si lo dejamos mucho tiempo le damos hasta que termine y el resultado será un archivo con el resultado.

11 Comentarios

  1. Muchas gracias, es una buena idea. Pero no funciona como se supone que debería funcionar. En la cláusula
    for /F «delims=» %%i in (‘ping 172.16.0.1 -t’) do call :format «%%i»
    no se ejecuta el do call format hasta que todo el comando ‘ping 172.16.0.1 -t’ se ha ejecutado (es decir hasta que no la interrumpes con Ctrl+C). Una vez que has interrumpido el ping continuo se ejecuta el bucle for sobre cada una de las líneas resultado del comando ping almacenado en el buffer de salida (por eso a uno de los usuarios sólo se le almacena el último minuto, su buffer de consola debe ser pequeño) con milisegundos de diferencia. Por eso en el resultado en la imagen que has puesto todos los pings tienen la misma hora con menos de 1 segundo de diferencia entre el primero y el último. Es decir, todos los pings van a estar referenciados a la hora en la que cortaste el ping con Ctrl+C, no la hora a la que se produjo realmente el corte de comunicación por lo que registrar la hora es inutil. Para que funcione como quieres que funcione hay que modificar un poco el script:

    @echo off
    setlocal

    :ini
    for /F «skip=2 delims=» %%i in (‘ping 192.168.10.1 -n 1’) do (
    call :format «%%i»
    goto salidafor)

    :salidafor
    goto ini

    :format
    echo %date% %time% %1 1>> test2.txt
    timeout 1 > NUL

    Ejecutamos un único ping cada vez (ping X.X.X.X -n 1) del cual solo procesamos la 3º línea (skip=2 y goto salidafor) que es la que tiene los mseg resultado del ping. Cada único ping se graba en su hora real en la subrutina format en un bucle infinito (goto ini) que no se para hasta que no se detenga con Ctrl+C. Para que el ping único se ejecute cada segundo hay que poner un retardo de 1 segundo en la subrutina format (timeout 1).
    De todas formas tu script ha sido la base para monitorizar un enlace satélite que estoy probando durante toda la noche. Un extracto del resultado es:

    09/04/2021 18:36:45,82 «Tiempo de espera agotado para esta solicitud.»
    09/04/2021 18:36:49,83 «Tiempo de espera agotado para esta solicitud.»
    09/04/2021 18:36:53,81 «Tiempo de espera agotado para esta solicitud.»
    09/04/2021 18:36:57,83 «Tiempo de espera agotado para esta solicitud.»
    09/04/2021 18:37:01,83 «Tiempo de espera agotado para esta solicitud.»
    09/04/2021 18:37:05,81 «Tiempo de espera agotado para esta solicitud.»
    09/04/2021 18:37:09,83 «Tiempo de espera agotado para esta solicitud.»
    09/04/2021 18:38:09,67 «Respuesta desde 192.168.10.1: bytes=32 tiempo=1189ms TTL=63»
    09/04/2021 18:38:11,42 «Respuesta desde 192.168.10.1: bytes=32 tiempo=1198ms TTL=63»
    09/04/2021 18:38:13,39 «Respuesta desde 192.168.10.1: bytes=32 tiempo=1181ms TTL=63»
    09/04/2021 18:38:15,41 «Respuesta desde 192.168.10.1: bytes=32 tiempo=1188ms TTL=63»
    09/04/2021 18:38:17,47 «Respuesta desde 192.168.10.1: bytes=32 tiempo=1196ms TTL=63»
    09/04/2021 18:38:19,41 «Respuesta desde 192.168.10.1: bytes=32 tiempo=1180ms TTL=63»
    09/04/2021 18:38:21,47 «Respuesta desde 192.168.10.1: bytes=32 tiempo=1195ms TTL=63»
    09/04/2021 18:38:23,57 «Respuesta desde 192.168.10.1: bytes=32 tiempo=1215ms TTL=63»

  2. Hola muchas gracias por la información, lo probé pero tengo un problema con el resultado le ejecuto por casi 20 minutos pero solo se guarda los del casi ultimo minuto y no se como se puede corregir eso? Agradecería una ayuda

Deja un comentario