Записать выполнение команды ping в файл со временем ? Как создать bat файл ?

Команда ping — утилита для проверки соединений в сети на основе TCP/IP. Чаще всего для обнаружения компьютера в сети мы используем команду ping в командной строке. Но если эта команда должна выполняться продолжительно время, возникает желание записать выполнение команды ping в файл со временем.

Linux - как записать выполнение в файл лог пинга (команда ping) с указанием времени отправки/получения пакета или Destination Host Unreachable ?

Записать выполнение команды ping в файл

Самый простой вариант, это выполнить команду:

ping -t 192.168.0.101 >> C:\logfile.log

Получим такой файл

Ответ от 192.168.0.101: число байт=32 время=3мс TTL=128
Превышен интервал ожидания для запроса.
Ответ от 192.168.0.101: число байт=32 время=36мс TTL=128

При этом если использовать одинарную стрелочку " > ", logfile.log будет перезаписываться, если двойную " >> " - дописываться.

Записать выполнение команды ping в файл со временем

Для этого выполним команду:

for /l %i in (0,0,1) do @cmd /c "echo.|set/p=%TIME:~0,8^%" >> c:\logfile.log & ping -n 1 192.168.0.101 | findstr "Превышен Ответ" >> c:\logfile.log & ping -n 2 localhost > nul

Получим такой файл

14:07:16  Ответ от 192.168.0.101: число байт=32 время=3мс TTL=128
14:07:17  Превышен интервал ожидания для запроса.
14:07:22  Превышен интервал ожидания для запроса.
14:07:27  Ответ от 192.168.0.101: число байт=32 время=117мс TTL=128
14:07:30  Ответ от 192.168.0.101: число байт=32 время=6мс TTL=128

Сразу отмечаю, что файл создаётся в кодировке 866 OEM - русская, поэтому открывать его лучше в программах AkelPad, Notepad++ или других подобных. Блокнот покажет абру кадабру там где кириллица

Создать bat файл и записать выполнение команды ping в файл со временем

Нельзя называть *. bat файлы именами, совпадающими с любыми командами "ping.bat" ("ping.cmd").

Можно так: "пинг.bat" ("пинг.cmd")

Создать файл, например пинг.bat и обязательно сохранить в кодировке 866 OEM - русская

@>"C:\logfile.log" (
 for /l %%i in () do @>nul chcp 866& ping -n 1 192.168.0.101| findstr/i "Превышен Ответ"|(
 for /f "delims=" %%j in ('more') do @>nul chcp 866& cmd/v/c "echo.!time:~0^,8! %%j")
)

Получим такой файл

14:36:48 Ответ от 192.168.0.101: число байт=32 время=7мс TTL=128
14:36:49 Ответ от 192.168.0.101: число байт=32 время=40мс TTL=128
14:36:50 Ответ от 192.168.0.101: число байт=32 время=63мс TTL=128
14:36:52 Превышен интервал ожидания для запроса.
14:36:56 Превышен интервал ожидания для запроса.
14:37:00 Превышен интервал ожидания для запроса.
14:37:05 Ответ от 192.168.0.103: Заданный узел недоступен.
14:37:10 Ответ от 192.168.0.103: Заданный узел недоступен.
14:37:16 Ответ от 192.168.0.103: Заданный узел недоступен.
14:37:19 Ответ от 192.168.0.101: число байт=32 время=40мс TTL=128
14:37:20 Ответ от 192.168.0.101: число байт=32 время=3мс TTL=128

Если команда будет выполняться долго, например сутки, то анализировать такой лог будет довольно сложно.  Так что можно создать такой файл:

@>"C:\logfile.log" (
 for /l %%i in () do @>nul chcp 866& ping -n 1 192.168.0.101| findstr/i "Превышен Заданный"|(
 for /f "delims=" %%j in ('more') do @>nul chcp 866& cmd/v/c "echo.!time:~0^,8! %%j")
)

или так:

@>"C:\logfile.log" (
 for /l %%i in () do @>nul chcp 866& ping -n 1 192.168.0.101| findstr/i "Превышен интервал-Заданный узел"|(
 for /f "delims=" %%j in ('more') do @>nul chcp 866& cmd/v/c "echo.!time:~0^,8! %%j")
)

Получим вот такой файл, в который записываются только строки "Превышен интервал ожидания для запроса" и "Заданный узел недоступен"

15:37:22 Превышен интервал ожидания для запроса.
15:37:26 Превышен интервал ожидания для запроса.
15:37:29 Ответ от 192.168.0.103: Заданный узел недоступен.
15:37:32 Ответ от 192.168.0.103: Заданный узел недоступен.
15:37:35 Ответ от 192.168.0.103: Заданный узел недоступен.
15:38:50 Превышен интервал ожидания для запроса.
15:38:54 Превышен интервал ожидания для запроса.
15:38:58 Превышен интервал ожидания для запроса.
15:39:41 Ответ от 192.168.0.103: Заданный узел недоступен.
15:39:44 Ответ от 192.168.0.103: Заданный узел недоступен.
15:39:47 Ответ от 192.168.0.103: Заданный узел недоступен.

Если очень надо открывать файл logfile.log стандартным блокнотом, то изменяем кодировку в 3-й строке

...('more') do @>nul chcp 1251& cmd...