2015-02-18 2 views
0

Как я могу проверить пакетный файл, если хост доступен или нет? Проблема заключается в том, что ping возвращает 0 не только успех, но и на Destination host unreachable ошибке:Проверка доступности хоста в командной строке Windows

C:\>ping 192.168.1.1 -n 1 

Pinging 192.168.1.1 with 32 bytes of data: 
Reply from 192.168.1.1: bytes=32 time=3ms TTL=64 

Ping statistics for 192.168.1.1: 
    Packets: Sent = 1, Received = 1, Lost = 0 (0% loss), 
Approximate round trip times in milli-seconds: 
    Minimum = 3ms, Maximum = 3ms, Average = 3ms 

C:\>echo %errorlevel% 
0 

C:\>ping 192.168.1.105 -n 1 

Pinging 192.168.1.105 with 32 bytes of data: 
Reply from 192.168.1.102: Destination host unreachable. 

Ping statistics for 192.168.1.105: 
    Packets: Sent = 1, Received = 1, Lost = 0 (0% loss), 

C:\>echo %errorlevel% 
0 

Есть ли способ сделать это с ping или любым другим инструментом сборки-в-Windows? Я бы предпочел не устанавливать что-либо, если это возможно ...

ответ

1

ли что-то вроде этого:

PING 192.168.1.1 -n 1 | FIND /I "Reply from " 

Затем вы можете проверить Errorlevel

Edit: Для того, чтобы разместить «Destination хосту ошибку вы могли бы сделать это:.

PING 192.168.1.1 -n 1 | FIND /I /V "unreachable" | FIND /I "Reply from " 
+0

хороший, хотя и должен был найти «TTL», а не «Ответ от», так как " Destination host unreachable "также имеет« Ответ от »внутри;) – burtek

+0

Что относительно' Reply from 192.168.1.102: Destination host unreachable.'? – Stephan

+0

@Stephan, см. Мой отредактированный пост. – RGuggisberg

0

Я думаю ЬгасегЬ что вы need.Sets Равен 1, если не могу найти host.And должен использовать тот же порт, как пинг -h 2 является чтобы сократить время ожидания, поскольку полный маршрут не требуется.

tracert -h 2 somehost.com >nul 2>nul && (
    echo reachable host 
) || (
    echo unreachable host 
) 

EDIT: напечатать правильный ErrorLevel в скобках нужно запаздывающих более сложный пример expansion.Here в:

@echo off 

setlocal enableDelayedExpansion 

echo checking google.com 
tracert -h 1 google.com >nul 2>nul && (
    echo reachable host 
    echo !errorlevel! 
    rem prevent execution of negative condition 
    color 22 
) || (
    echo unreachable host 
    echo !errorlevel! 
) 


echo checking asdasdjjakskwkdhasdasd 
tracert -h 1 asdasdjjakskwkdhasdasd >nul 2>nul && (
    echo reachable host# 
    echo !errorlevel! 
    rem prevent execution of negative condition 
    color 
) || (
    echo unreachable host# 
    echo !errorlevel! 
) 
+0

Я получаю '% errorlevel%' 0 в обеих ситуациях. – burtek

+0

@burtek - если его достижимый и недоступный? – npocmaka

+0

В обеих ситуациях. – burtek

1

Следующий фрагмент кода должен работать:

set "_ip=localhost" 
set "_ip=192.168.1.1" 
ping %_ip% -n 1 -4 | find /i "TTL=">nul 
if errorlevel 1 (
    echo ping %_ip% failure 
) else ( 
    echo ping %_ip% success 
) 
  • -4 для принудительного использования IPv4 (например, ping localhost отвечает IPv6 без каких-либо TTL= выход)
  • | find /i "TTL=", как find команда вызывает errorlevel хорошо
  • >nul для подавления нежелательного выходного
Смежные вопросы