Search code examples
windowsbatch-filecmdnetwork-programmingping

Checking host reachability on windows command line


How can I check in batch-file if host is reachable or not? The problem is that ping returns 0 not only on success, but also on Destination host unreachable error:

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

Is there any way to do it with ping or any other build-in-Windows tool? I would prefer not to install anything if that's possible...


Solution

  • Do something like this:

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

    Then you can check errorlevel

    Edit: To accommodate "Destination host unreachable error you could do this:

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