Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Проверка компьютера на ответ пинга (http://forum.oszone.net/showthread.php?t=312688)

densan 14-03-2016 17:17 2615938

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

Код:

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 2615942

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 2616114

Foreigner, большое вам спасибо за подробный ответ.

megaloman 15-03-2016 21:28 2616386

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 2616399

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 2616437

Цитата:

Цитата Foreigner
Очень интересное поведение »

Самое странное, что при многократном запуске такого батника результаты могут меняться. Похоже, это специфический адрес, ИМХО в сети нет такого компьютера. Он не корректен для локальной сети.

Foreigner 16-03-2016 00:14 2616441

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 без ошибок в отличии от простого пинга.


Время: 06:45.

Время: 06:45.
© OSzone.net 2001-