Показать полную графическую версию : [решено] Проверка компьютера на ответ пинга
Здравствуйте.
Прошу помощи в доработке скрипта.
Задача: выполнить действия по списку компьютеров, предварительно проверив, что компьютер в доступен (проверяю доступность пингом)
for /f %%i in (pc1.txt) do (
Ping -n 1 -w 1000 %%i |Find "TTL=">nul
If %ErrorLevel%==0 (
Echo Online
) Else (
Echo Offline
)
)
в файл pc1.txt внес 2 IP один пингуется, а второй нет, но для для обоих компьютеров выходит Online.
Foreigner
14-03-2016, 17:38
densan, либо выносите за скобки, либо прописывайте setlocal enabledelayedexpansion, либо пользуйтесь булевыми операторами.
@echo off
setlocal enabledelayedexpansion
for /f %%i in (pc1.txt) do (
Ping -n 1 -w 1000 %%i |Find "TTL=">nul
If !ErrorLevel!==0 (
Echo Online
) Else (
Echo Offline
)
)
@echo off
for /f %%i in (pc1.txt) do call:ping "%%i"
goto:eof
:ping
Ping -n 1 -w 1000 %%i |Find "TTL=">nul
If %ErrorLevel%==0 (
Echo Online
) Else (
Echo Offline
)
@echo off
for /f %%i in (pc1.txt) do (
Ping -n 1 -w 1000 %%i |Find "TTL=">nul && Echo Online || Echo Offline
)
Foreigner, большое вам спасибо за подробный ответ.
megaloman
15-03-2016, 21:28
Foreigner, А зачем нужен Find, почему бы не ограничиться одним ping?@Echo Off
for /f %%i in (pc1.txt) do Ping -n 1 -w 1000 %%i >nul 2>nul && Call :Something %%i || Echo Offline %%i
GoTo :Eof
:Something
Echo Online %1 Делаю некое действие
Foreigner
15-03-2016, 22:06
megaloman, Тоже так раньше думал, пока не получил не тот результат, который ожидался:
> ping 198.0.0.1 -n 1 && echo True || echo False
Обмен пакетами с 198.0.0.1 по с 32 байтами данных:
Превышен интервал ожидания для запроса.
Статистика Ping для 198.0.0.1:
Пакетов: отправлено = 1, получено = 0, потеряно = 1
(100% потерь)
False
> 1>nul ping 198.0.0.1 -n 1 && echo True || echo False
True
> 1>nul ping 198.0.0.1 -n 1 && echo True || echo False
True
> ping 198.0.0.1 -n 1 && echo True || echo False
Обмен пакетами с 198.0.0.1 по с 32 байтами данных:
Превышен интервал ожидания для запроса.
Статистика Ping для 198.0.0.1:
Пакетов: отправлено = 1, получено = 0, потеряно = 1
(100% потерь)
False
Очень интересное поведение
megaloman
15-03-2016, 23:48
Очень интересное поведение » Самое странное, что при многократном запуске такого батника результаты могут меняться. Похоже, это специфический адрес, ИМХО в сети нет такого компьютера. Он не корректен для локальной сети.
Foreigner
16-03-2016, 00:14
megaloman, Да это я ошибся (c адресом), хотел из домашней роутерной подсети 192.168.0.*, тоже есть расхождения в показаниях, но мы то точно знаем, какие адреса задействованы:
@echo off
for /l %%i in (0,1,10) do (
echo 192.168.0.%%i
1>nul ping 192.168.0.%%i -n 1 && echo 1 || echo 0
ping 192.168.0.%%i -n 1 | 1>nul findstr "TTL=" && echo 1 || echo 0
)
С поиском TTL без ошибок в отличии от простого пинга.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.