Войти

Показать полную графическую версию : [решено] Проверка компьютера на ответ пинга


densan
14-03-2016, 17:17
Здравствуйте.
Прошу помощи в доработке скрипта.
Задача: выполнить действия по списку компьютеров, предварительно проверив, что компьютер в доступен (проверяю доступность пингом)

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

)

densan
15-03-2016, 09:11
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