Posted By: Anonymous
On the Windows command prompt
cmd, I use
ping -t to 10.21.11.81
Reply from 10.21.11.81: bytes=32 time=3889ms TTL=238 Reply from 10.21.11.81: bytes=32 time=3738ms TTL=238 Reply from 10.21.11.81: bytes=32 time=3379ms TTL=238
Are there any possibilities to get an output like this?
10:13:29.421875 Reply from 10.21.11.81: bytes=32 time=3889ms TTL=238 10:13:29.468750 Reply from 10.21.11.81: bytes=32 time=3738ms TTL=238 10:13:29.468751 Reply from 10.21.11.81: bytes=32 time=3379ms TTL=238
Please note that I wanna achieve this with only commands provided by CMD
@echo off ping -t localhost|find /v ""|cmd /q /v:on /c "for /l %%a in (0) do (set "data="&set /p "data="&if defined data echo(!time! !data!)"
note: code to be used inside a batch file. To use from command line replace
Start the ping, force a correct line buffered output (
find /v), and start a
cmd process with delayed expansion enabled that will do an infinite loop reading the piped data that will be echoed to console prefixed with the current time.
In faster/newer machines/os versions there is a synchronization problem in previous code, making the
set /p read a line while the
ping command is still writting it and the result are line cuts.
@echo off ping -t localhost|cmd /q /v /c "(pause&pause)>nul & for /l %%a in () do (set /p "data=" && echo(!time! !data!)&ping -n 2 localhost>nul"
pause commands are included at the start of the subshell (only one can be used, but as
pause consumes a input character, a CRLF pair is broken and a line with a LF is readed) to wait for input data, and a
ping -n 2 localhost is included to wait a second for each read in the inner loop. The result is a more stable behaviour and less CPU usage.
NOTE: The inner
ping can be replaced with a
pause, but then the first character of each readed line is consumed by the
pause and not retrieved by the