Пишем Ping в файл. Какой Errorlevel выбрать?

Написал вот такой скрипт в .bat файле:
@Echo Off
 
:begin
 
echo Date %date:~0,2%-%date:~3,2%-%date:~6,4% Time%time%>> %DATE%.txt
 
ping -n 5 192.168.1.100>> %DATE%.txt
if errorlevel 1 echo ALARM Date %date:~0,2%-%date:~3,2%-%date:~6,4% Time%time% >>"%date%ALARM_192.168.1.100.txt"
ping -n 30 127.0.0.1 >nul
 
echo ********************************************************>> %DATE%.txt
 
goto begin


Все работает, но в процессе обнаружил следующее:
errorlevel 1 это "превышен интервал ожидания для запроса"
errorlevel 0 это "заданный узел недоступен" и "обмен пакетами...(нормальный пинг)"

Вопрос: мне нужно писать в файл тревоги и когда превышен интервал и когда заданный узел недоступен. Как это сделать, если у "узел недоступен" errorlevel как у нормального пинга?

И еще: чем принципиально отличается "заданный узел недоступен" от "превышен интервал ожидания для запроса"
  • Вопрос задан
  • 5852 просмотра
Решения вопроса 1
@res2001
Developer, ex-admin
Я в делал так:
2>nul ping %IP% | 1>nul 2>&1 findstr "TTL" || (echo.Ошибка)
Т.е. в выводе ping ищем вхождение подстроки TTL, если не найдено - то ошибка.
Так срабатывает более надежно, чем проверкой errorlevel pinga.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
BuriK666
@BuriK666
Компьютерный псих
Узел недоступен это ICMP Type 3
А Превышен интервал ожидания для запроса - это ответа вообще никакого не пришло..
Ответ написан
Комментировать
CTpaHHoe
@CTpaHHoe
Аларм нужен, когда хост недоступен?
Тогда как-то так (в моём скрипте выполняется ожидание доступности хоста)

:connect
ping -n 2 %VPN_HOST% | find /i "TTL="
if %ERRORLEVEL%==1 (
echo "%VPN_HOST%" not reachable
call :sleep 10
goto connect
)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы