Допустим, Вам необходимо запротоколировать состояние узлов своей подсети. Условно предположим диапазон пингуемых адресов с 10.10.10.1 по 10.10.10.10. Если узел в сети (получен отклик), в текстовый файл выводятся дата и время опроса + имя узла [IP-адрес]. В результате получаем список активных узлов на момент опроса заданного диапазона IP-адресов своей подсети.
set ipadr=1
:lb
if %ipadr%==11 (exit) else ( ping -a -n 1 10.10.10.%ipadr%
if not errorlevel 1 (for /F "tokens=4,5" %%a in ('ping -a -n 1 10.10.10.%ipadr% ^|find /i "обмен"')do (echo %date% %time% %%a %%b >>ping_subnet.txt)))
set /a ipadr=%ipadr%+1
goto lb
Во второй раз задача идентична, но реализована более лаконично (меньше строк + избавляемся от GOTO).
Пример 2:
if not errorlevel 1 (for /F "tokens=4,5" %%a in ('ping -a -n 1 10.10.10.%%i ^|find /i "обмен"')do (echo %date% %time% %%a %%b >>ping_subnet.txt)))
P.S. В полноценных языках программирования, GOTO является признаком плохого стиля, и настоятельно рекомендуется его избегать. Однако в bat'никах, не смотря на скудность инструментария командного процессора, GOTO позволяет реализовать не только циклы, но и процедуры. О способах реализации процедур и функций в пакетных файлах, возможно в следующий раз
Автор: мой коллега Олейников Д.В.