He encontrado una manera de guardar en cada linea la hora del ping y el resultado.
@echo off
setlocal
for /F "delims=" %%i in ('ping 127.0.0.1 -t') do call :format "%%i"
goto :done
:format
echo %date% %time% %1 1>> output.txt
:done
De esta forma se guarda todo en una linea en un archivo de texto, pero hay que depender de que el usuario le de a Ctrl+C y a S.
Tengo otro codigo en el que se va guardando en tiempo real, asi aunque se apague el equipo o se cierre directamente la ventana el archivo tiene todo el registro.
Ademas hago que cada dia cree un archivo nuevo con la fecha y hora, ya que hay que dejarlo todo el dia corriendo.
rem @echo off
set Any=%Date:~-4%
set Mes=%Date:~3,2%
set Dia=%Date:~0,2%
set Hor=%Time:~0,2%
set Min=%Time:~3,2%
set Seg=%Time:~6,2%
REM Creamos el archivo cada vez que se ejecuta el programa con la fecha y hora en el nombre y la primera linea
set nombre=%Any%-%Mes%-%Dia%__%Hor%-%Min%-%Seg%
echo %nombre% >%nombre%.txt
REM Hacemos ping y lo añadimos poniendo la fecha delante linea a linea
:LOOPSTART
set Any=%Date:~8%
set Mes=%Date:~3,2%
set Dia=%Date:~0,2%
set Hor=%Time:~0,2%
set Min=%Time:~3,2%
set Seg=%Time:~6,2%
rem set Respuesta=ping 192.168.1.4
echo %Any%-%Mes%-%Dia%__%Hor%-%Min%-%Seg% >>%nombre%.txt
ping 8.8.8.8 -n 1 >>%nombre%.txt
REM tiempo que queremos que pase entre ping y ping en segundos
timeout 2 > NUL
GOTO LOOPSTART
Lo que no consigo es que me meta cada ping con su hora en una linea. He mirado la documentacion del for, pero lo empleado en el primer ejemplo, que si que guarda cada ping en una linea, tiene bastantes cosas mas que no entiendo. ¿Hay forma de combinar los dos ejemplos de algun modo para meta cada linea en tiempo real?
@echo off
color a
goto kill
:format
Rem by **Aincrad**
set año=%date%
Set hora=%time:~0,8%
Set nombre= [%año%]-[%hora%]
set Ip=127.0.0.1
if not exist log.txt goto Createlog >nul
echo Haciendo Ping a %Ip% ... (Revisar el Archivo LOG).
(
echo/
echo %nombre%
echo/
echo/
ping %Ip% -n 1
echo/
echo/
echo/
echo ---------------------------------------------------------------------------------------------- )>>log.txt
goto format
:Createlog
echo Foro el hacker.NET >log.txt
goto format
:kill
tasklist | find /i "PING.exe" && (
TASKKILL /IM "PING.exe" /F
goto format
) || (
goto format
)
Aveces no puedes eliminar el log.txt por que queda abierto el Proceso Ping.exe Solo abre el administrador de tareas y cierralo . o usa >
TASKKILL /IM "PING.exe" /F
Gracias. Aunque eso no guarda en una linea la información veo cosas interesantes.
Si alguien entiende como lo hace el del primer ejemplo igual se podia implementar
El resultado que consigo es:
CitarForo el hacker.NET
[22/01/2019]-[12:41:43]
Haciendo ping a 127.0.0.1 con 32 bytes de datos:
Respuesta desde 127.0.0.1: bytes=32 tiempo<1m TTL=128
Estad¡sticas de ping para 127.0.0.1:
Paquetes: enviados = 1, recibidos = 1, perdidos = 0
(0% perdidos),
Tiempos aproximados de ida y vuelta en milisegundos:
M¡nimo = 0ms, M ximo = 0ms, Media = 0ms
----------------------------------------------------------------------------------------------
[22/01/2019]-[12:41:43]
Haciendo ping a 127.0.0.1 con 32 bytes de datos:
Respuesta desde 127.0.0.1: bytes=32 tiempo<1m TTL=128
Estad¡sticas de ping para 127.0.0.1:
Paquetes: enviados = 1, recibidos = 1, perdidos = 0
(0% perdidos),
Tiempos aproximados de ida y vuelta en milisegundos:
M¡nimo = 0ms, M ximo = 0ms, Media = 0ms
Y lo deseado es:
Citar26/10/2009 13:53:54.31 "Respuesta desde 127.0.0.1: bytes=32 tiempo<1m TTL=128"
26/10/2009 13:53:54.31 "Respuesta desde 127.0.0.1: bytes=32 tiempo<1m TTL=128"
26/10/2009 13:53:54.31 "Respuesta desde 127.0.0.1: bytes=32 tiempo<1m TTL=128"
26/10/2009 13:53:54.31 "Respuesta desde 127.0.0.1: bytes=32 tiempo<1m TTL=128"
26/10/2009 13:53:54.32 "Respuesta desde 127.0.0.1: bytes=32 tiempo<1m TTL=128"
26/10/2009 13:53:54.32 "Respuesta desde 127.0.0.1: bytes=32 tiempo<1m TTL=128"
26/10/2009 13:53:54.32 "Respuesta desde 127.0.0.1: bytes=32 tiempo<1m TTL=128"
26/10/2009 13:53:54.34 "Respuesta desde 127.0.0.1: bytes=32 tiempo<1m TTL=128"
26/10/2009 13:53:54.34 "Respuesta desde 127.0.0.1: bytes=32 tiempo<1m TTL=128"
26/10/2009 13:53:54.34 "Respuesta desde 127.0.0.1: bytes=32 tiempo<1m TTL=128"
26/10/2009 13:53:54.34 "Respuesta desde 127.0.0.1: bytes=32 tiempo<1m TTL=128"
26/10/2009 13:53:54.35 "Respuesta desde 127.0.0.1: bytes=32 tiempo<1m TTL=128"
26/10/2009 13:53:54.35 "Respuesta desde 127.0.0.1: bytes=32 tiempo<1m TTL=128"
26/10/2009 13:53:54.35 "Respuesta desde 127.0.0.1: bytes=32 tiempo<1m TTL=128"
Aunque ahora estoy viendo que tampoco me fucniona el codigo del primer ejemplo. No crea ningun archivo :o
Bueno, pues ese es el resultado que me gustaria conseguir.
Quisiera ademas evitar tener que estar generando un archivo a cada ping para tomar de ahi el resultado.
Saludos,
@ECHO Off
(
FOR /L %%i in (1,1,5) do (
<nul (set /p tm=%date% %time:~,-3% )
PING -n 1 127.0.0.1 | FIND "TTL"
)
) >> pg.txt
- Devuelve un fichero pg.txt con:
22/01/2019 10:09:17 Respuesta desde 127.0.0.1: bytes=32 tiempo<1m TTL=128
22/01/2019 10:09:17 Respuesta desde 127.0.0.1: bytes=32 tiempo<1m TTL=128
22/01/2019 10:09:17 Respuesta desde 127.0.0.1: bytes=32 tiempo<1m TTL=128
22/01/2019 10:09:17 Respuesta desde 127.0.0.1: bytes=32 tiempo<1m TTL=128
22/01/2019 10:09:17 Respuesta desde 127.0.0.1: bytes=32 tiempo<1m TTL=128
Genial!!
Muchisimas gracias.
Va perfecto. Ahi lo mando tal como ha quedado implementado al codigo para hacer un archivo por dia, que se cargue al iniciar windows y que quede guardado al cerrar windows.
@echo off
rem set datetimef=%date:~-4%_%date:~3,2%_%date:~0,2%__%time:~0,2%_%time:~3,2%_%time:~6,2%
set Any=%Date:~-4%
set Mes=%Date:~3,2%
set Dia=%Date:~0,2%
set Hor=%Time:~0,2%
set Min=%Time:~3,2%
set Seg=%Time:~6,2%
REM Creamos el archivo cada vez que se ejecuta el programa con la fecha y hora en el nombre y la primera linea
set nombre=%Any%-%Mes%-%Dia%__%Hor%-%Min%-%Seg%
echo %nombre% >%nombre%.txt
REM Hacemos ping y lo añadimos poniendo la fecha delante linea a linea
:LOOPSTART
(
FOR /L %%i in (1,1,1) do (
<nul (set /p tm=%date% %time:~,-3% )
PING -n 1 8.8.8.8 | FIND "TTL"
PING -n 1 8.8.8.8 | FIND "error"
)
) >> %nombre%.txt
rem set Respuesta=ping 192.168.1.4
REM tiempo que queremos que pase entre ping y ping en segundos
timeout 1 > NUL
GOTO LOOPSTART
pause
He añadido un segundo ping para que cuando haya un error lo indique y haya salto de linea. Claro que si falla de manera muy puntual el primero podria no anotar nada y al hacer el segundo obtener respuesta y no anotar nada tampoco.
El problema cuando no anota nada es que no cambia de linea dando este resultado que aunque muy util es poco elegante
24/01/2019 13:11:44 Respuesta desde 192.168.1.4: bytes=32 tiempo<1m TTL=128
24/01/2019 13:11:46 Respuesta desde 192.168.1.4: bytes=32 tiempo<1m TTL=128
24/01/2019 13:11:48 24/01/2019 13:11:50 24/01/2019 13:11:52 24/01/2019 13:11:54 24/01/2019 13:11:56 24/01/2019 13:11:58 24/01/2019 13:12:00 Respuesta desde 192.168.1.4: bytes=32 tiempo<1m TTL=128
24/01/2019 13:12:02 Respuesta desde 192.168.1.4: bytes=32 tiempo<1m TTL=128
Efectivamente probando a cortar la conexion a la primera he obtenido el resultado predecible. Ha habido una anotacion de solo la hora y sin salto de linea:
Devuelve:
2019-01-24__13-36-14
24/01/2019 13:36:17 Respuesta desde 192.168.1.4: bytes=32 tiempo<1m TTL=128
24/01/2019 13:36:18 Respuesta desde 192.168.1.4: bytes=32 tiempo<1m TTL=128
24/01/2019 13:36:19 Respuesta desde 192.168.1.4: bytes=32 tiempo<1m TTL=128
24/01/2019 13:36:20 Respuesta desde 192.168.1.4: bytes=32 tiempo<1m TTL=128
24/01/2019 13:36:21 24/01/2019 13:36:22 PING: error en la transmisi¢n. Error general.
24/01/2019 13:36:23 PING: error en la transmisi¢n. Error general.
24/01/2019 13:36:24 PING: error en la transmisi¢n. Error general.
24/01/2019 13:36:25 PING: error en la transmisi¢n. Error general.
24/01/2019 13:36:32 PING: error en la transmisi¢n. Error general.
24/01/2019 13:36:33 PING: error en la transmisi¢n. Error general.
24/01/2019 13:36:34 PING: error en la transmisi¢n. Error general.
24/01/2019 13:36:35 Respuesta desde 192.168.1.4: bytes=32 tiempo<1m TTL=128
24/01/2019 13:36:36 Respuesta desde 192.168.1.4: bytes=32 tiempo<1m TTL=128
24/01/2019 13:36:37 Respuesta desde 192.168.1.4: bytes=32 tiempo<1m TTL=128
24/01/2019 13:36:38 Respuesta desde 192.168.1.4: bytes=32 tiempo<1m TTL=128
A ver si encuentro la manera de hacerlo con un solo ping y que guarde en cada linea el resultado, aun cuando haya error.
- Revisas el ERRORLEVEL, si este es 1 es que a habido un error, si es 0 es que todo ha ido bien:
@ECHO Off
(
FOR /L %%i in (1,1,5) do (
<nul (set /p tm=%date% %time:~,-3% )
PING -n 1 8.8.8.8 | FIND "TTL"
IF ERRORLEVEL 1 ECHO Error, destino inaccesible
)
) >> pg.txt
Funciona a la perfeccion. Que monton de cosas tiene el Batch que no se. He visto que hay buenos tutoriales aquí. Cuando pueda les dare un repaso.
Eres un crack! Muchas gracias!
;-)
Así queda el programa completo
@echo off
REM Curiosamente si meto el formato de fecha y hora como en la siguiente linea, luego no se repite el loop
rem set datetimef=%date:~-4%_%date:~3,2%_%date:~0,2%__%time:~0,2%_%time:~3,2%_%time:~6,2%
REM damos formato a la fecha y la hora y lo guardamos en cada variable
set Any=%Date:~-4%
set Mes=%Date:~3,2%
set Dia=%Date:~0,2%
set Hor=%Time:~0,2%
set Min=%Time:~3,2%
set Seg=%Time:~6,2%
REM Creamos el archivo cada vez que se ejecuta el programa con la fecha y hora en el nombre y la primera linea
set nombre=%Any%-%Mes%-%Dia%__%Hor%-%Min%-%Seg%
echo %nombre% >%nombre%.txt
REM Hacemos ping y lo añadimos poniendo la fecha delante linea a linea
:LOOPSTART
(
FOR /L %%i in (1,1,1) do (
<nul (set /p tm=%date% %time:~,-3% )
PING -n 1 8.8.8.8 | FIND "TTL"
IF ERRORLEVEL 1 ECHO Error, Tiempo de espera agotado. No se ha podido conectar con la IP.
)
) >> %nombre%.txt
REM tiempo que queremos que pase entre ping y ping en segundos
timeout 1 > NUL
GOTO LOOPSTART
pause
Y así el archivo que crea
25/01/2019 10:50:26 Respuesta desde 8.8.8.8: bytes=32 tiempo=16ms TTL=119
25/01/2019 10:50:28 Respuesta desde 8.8.8.8: bytes=32 tiempo=14ms TTL=119
25/01/2019 10:50:30 Respuesta desde 8.8.8.8: bytes=32 tiempo=14ms TTL=119
25/01/2019 10:50:32 Error, Tiempo de espera agotado. No se ha podido conectar con la IP.
25/01/2019 10:50:41 Error, Tiempo de espera agotado. No se ha podido conectar con la IP.
25/01/2019 10:50:43 Error, Tiempo de espera agotado. No se ha podido conectar con la IP.
25/01/2019 10:50:45 Respuesta desde 8.8.8.8: bytes=32 tiempo=14ms TTL=119
25/01/2019 10:50:47 Respuesta desde 8.8.8.8: bytes=32 tiempo=14ms TTL=119
25/01/2019 10:50:49 Respuesta desde 8.8.8.8: bytes=32 tiempo=17ms TTL=119
25/01/2019 10:50:51 Respuesta desde 8.8.8.8: bytes=32 tiempo=14ms TTL=119
He tenido problemas al poner 6 variables asisgandolas a otra variable. Se cortaba la asignación y me decia que no se habia podido crear.
Os dejo como ha quedado finalmente con los comentarios del modo anterior para que se entienda mejor.
@echo off
REM Si queremos retrasar el incio del test habilitamos la linea del timeout
REM timeout 240 > NUL
echo.
echo El test de conexion a 192.168.1.10 cada 4 segundos ha comenzado
echo.
REM Creamos el archivo cada vez que se ejecuta el programa con la fecha y hora en el nombre y la primera linea
REM Al poner muchas variables seguidas asignadas a otra variable parece que daba fallo
REM set Any=%Date:~-4%
REM set Mes=%Date:~3,2%
REM set Dia=%Date:~0,2%
REM set Hor=%Time:~0,2%
REM set Min=%Time:~3,2%
REM set Seg=%Time:~6,2%
REM set nombre=%Any%-%Mes%-%Dia%__%Hor%-%Min%-%Seg%
REM Preparamos el nombre del archivo con solo 3 variables para que no de fallo
set fecha=%Date:~-4%-%Date:~3,2%-%Date:~0,2%
set Separador=__
set hora=%Time:~0,2%-%Time:~3,2%-%Time:~6,2%
set nombre=%fecha%%Separador%%hora%
echo %nombre% > %nombre%.txt
REM Hacemos ping y lo anadimos poniendo la fecha delante linea a linea
:LOOPSTART
(
FOR /L %%i in (1,1,1) do (
<nul (set /p tm=%date% %time:~,-3% )
PING -n 1 192.168.1.10 | FIND "TTL"
IF ERRORLEVEL 1 ECHO Error, Tiempo de espera agotado. No se ha podido conectar con la IP.
)
) >> %nombre%.txt
REM tiempo que queremos que pase entre ping y ping en segundos
timeout 4 > NUL
GOTO LOOPSTART
pause
Al probarlo en un ordenador con windows 7 home premium, conectado por wifi, el resultado que tengo es este:
2019-04-01__10-21-53
C:\asisrem\pinglog>(
(set /p tm=01/04/2019 10:21:53 ) 0<nul
PING -n 1 asisrem.com | FIND "TTL"
IF ERRORLEVEL 1 ECHO Error, Tiempo de espera agotado. No se ha podido conectar con la IP.
)
01/04/2019 10:21:53 Respuesta desde 31.47.74.215: bytes=32 tiempo=14ms TTL=52
Hay algun comando del script que no funcione en esa version?
No consigo que imprima el resultado. Me imprime en el txt el propio codigo, mientras que otros ordenadores con windows pro funciona bien.
Parece que se ha arrglado poniendo entre comillas asignación y variable.
set "nombre=%fecha%_%hora%"
Cuando vea que no falla pongo el script completo
Lo de las comillas tampoco ha funcionado. Ahora lleva dos semanas sin fallar despues de añadir los valores al nombre del archivo en dos pasos. Las comillas de momento las he dejado.
echo.
echo El test de conexion a 192.168.1.10 cada 4 segundos ha comenzado
echo.
echo ------------- NO CERRAR ESTA VENTANA -------------
REM Creamos el archivo cada vez que se ejecuta el programa con la fecha y hora en el nombre y la primera linea
set fecha=%Date:~-4%-%Date:~3,2%-%Date:~0,2%
set hora=%Time:~0,2%-%Time:~3,2%-%Time:~6,2%
REM Para concatenar y que no de problemas metemos variables y asignacion entre comillas
set nombre="%fecha%_%hora%"
echo %nombre%
REM Anadimos el nombre del archivo al archivo que creamos tras >
echo %nombre% > %nombre%.txt
REM Hacemos ping y lo anadimos poniendo la fecha delante linea a linea
:LOOPSTART
(
FOR /L %%i in (1,1,1) do (
<nul (set /p tm=%date% %time:~,-3% )
PING -n 1 192.168.1.10 | FIND "TTL"
IF ERRORLEVEL 1 ECHO Error, Tiempo de espera agotado. No se ha podido conectar con la IP.
)
) >> %nombre%.txt
REM tiempo que queremos que pase entre ping y ping en segundos
timeout 4 > NUL
GOTO LOOPSTART
pause
Hoy me falló de nuevo. Segun la versión de windows parece que es un problema el que no ponga un 0 delante de la hora. A ver si así:
@echo off
echo.
echo El test de conexion a 192.168.1.10 cada 4 segundos ha comenzado
echo.
echo ------------- NO CERRAR ESTA VENTANA -------------
REM Creamos el archivo cada vez que se ejecuta el programa con la fecha y hora en el nombre y la primera linea
set hour=%time:~0,2%
if "%hour:~0,1%" == " " set hour=0%hour:~1,1%
rem echo hour=%hour%
set min=%time:~3,2%
if "%min:~0,1%" == " " set min=0%min:~1,1%
rem echo min=%min%
set secs=%time:~6,2%
if "%secs:~0,1%" == " " set secs=0%secs:~1,1%
rem echo secs=%secs%
set fecha=%Date:~-4%-%Date:~3,2%-%Date:~0,2%
rem set hora=%Time:~0,2%-%Time:~3,2%-%Time:~6,2%
set hora=%hour%-%min%-%secs%
REM Para concatenar y que no de problemas metemos variables y asignacion entre comillas
set nombre=%fecha%_%hora%
echo %nombre%
REM Añadimos el nombre del archivo al archivo que creamos tras >
echo %nombre% > %nombre%.txt
REM Hacemos ping y lo anadimos poniendo la fecha delante linea a linea
:LOOPSTART
(
FOR /L %%i in (1,1,1) do (
<nul (set /p tm=%date% %time:~,-3% )
rem PING -n 1 192.168.1.10 | FIND "TTL"
PING -n 1 google.com | FIND "TTL"
IF ERRORLEVEL 1 ECHO Error, Tiempo de espera agotado. No se ha podido conectar con la IP.
)
) >>%nombre%.txt
REM tiempo que queremos que pase entre ping y ping en segundos
timeout 4 > NUL
GOTO LOOPSTART
pause