Пакетный файл Ping с отметкой времени и регистрацией тайм-аутов / отключений / сбоев - PullRequest
0 голосов
/ 15 апреля 2020

Я пытаюсь получить командный файл для отображения результатов проверки связи при одновременном входе в текстовый файл. Я нашел следующее решение: { ссылка }. Это делает именно то, что мне нужно, когда все подключено, однако я обнаружил, что окно командной строки / командный файл просто закроется, если произойдет отключение сети, что приведет к «общему отказу» (смоделированному простым отключением моего кабеля Ethe rnet). Я надеюсь, что вывод будет выглядеть примерно так:

Target Host = www.google.com 
Pinging www.google.com [172.217.9.36] with 32 bytes of data: 
Wed 04/15/2020 11:01:54 Reply from 172.217.4.196: bytes=32 time=46ms TTL=55
Wed 04/15/2020 11:01:55 Reply from 172.217.4.196: bytes=32 time=29ms TTL=55
Wed 04/15/2020 11:01:56 General failure.
Wed 04/15/2020 11:01:57 General failure.
Wed 04/15/2020 11:01:58 Reply from 172.217.4.196: bytes=32 time=29ms TTL=55
Wed 04/15/2020 11:01:59 Reply from 172.217.4.196: bytes=32 time=30ms TTL=55
Wed 04/15/2020 11:02:01 Request timed out.
Wed 04/15/2020 11:02:04 Request timed out.
Wed 04/15/2020 11:02:05 General failure.
Wed 04/15/2020 11:02:06 Reply from 172.217.4.196: bytes=32 time=31ms TTL=55

Для справки код, который я использую ниже, скопирован из связанного поста. Я бы просто оставил комментарий, но я еще не достаточно крут.

echo off

set /p host=host Address: 
set logfile=Log_%host%.log

echo Target Host = %host% >%logfile%
for /f "tokens=*" %%A in ('ping %host% -n 1 ') do (echo %%A>>%logfile% && GOTO Ping)
:Ping
for /f "tokens=* skip=2" %%A in ('ping %host% -n 1 ') do (
    echo %date% %time:~0,2%:%time:~3,2%:%time:~6,2% %%A>>%logfile%
    echo %date% %time:~0,2%:%time:~3,2%:%time:~6,2% %%A
    timeout 1 >NUL 
    GOTO Ping)

Любое изменение - способ обработать эти ошибки в командном файле, чтобы он не обработал sh?

1 Ответ

0 голосов
/ 15 апреля 2020

После еще нескольких попыток я нашел решение для своего собственного варианта использования. На самом деле он не «обрабатывает» ошибки в общепринятом смысле, но позволяет сценарию продолжать работу. Я просто добавил метку времени после для l oop с ошибкой, хотя вы можете добавить любое сообщение об ошибке, паузу и GOTO, чтобы повторить попытку. Думаю, я опубликую то, что я сделал, на случай, если кто-нибудь еще найдет это полезным, хотя в ретроспективе это вполне очевидно.

echo off

set /p host=host Address: 
set logfile=Log_%host%.log

echo Target Host = %host% >%logfile%
for /f "tokens=*" %%A in ('ping %host% -n 1 ') do (echo %%A>>%logfile% && GOTO Ping)
:Ping
for /f "tokens=* skip=2" %%A in ('ping %host% -n 1 ') do (
    echo %date% %time:~0,2%:%time:~3,2%:%time:~6,2% %%A>>%logfile%
    echo %date% %time:~0,2%:%time:~3,2%:%time:~6,2% %%A
    timeout 1 >NUL 
    GOTO Ping)

echo %date% %time:~0,2%:%time:~3,2%:%time:~6,2% Error>>%logfile%
echo %date% %time:~0,2%:%time:~3,2%:%time:~6,2% Error
timeout 1 >NUL
GOTO Ping
...