CMD/BAT - [решено] Проверка компьютера на ответ пинга

Ответить
Аватара пользователя
densan

CMD/BAT - [решено] Проверка компьютера на ответ пинга

Сообщение densan »

Здравствуйте.

Прошу помощи в доработке скрипта.

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





Код:

Код: Выделить всё

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

Re: CMD/BAT - [решено] Проверка компьютера на ответ пинга

Сообщение Foreigner »

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

Re: CMD/BAT - [решено] Проверка компьютера на ответ пинга

Сообщение densan »

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

Re: CMD/BAT - [решено] Проверка компьютера на ответ пинга

Сообщение densan »

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

Re: CMD/BAT - [решено] Проверка компьютера на ответ пинга

Сообщение Foreigner »

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

Re: CMD/BAT - [решено] Проверка компьютера на ответ пинга

Сообщение megaloman »

Цитата Foreigner:



Очень интересное поведение
CMD/BAT - [решено] Проверка компьютера на ответ пинга




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

Re: CMD/BAT - [решено] Проверка компьютера на ответ пинга

Сообщение Foreigner »

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

Вернуться в «Скриптовые языки администрирования Windows»