Windows 7マシンから、オフになっているマシンのIPアドレスにpingを実行します。
C:\>ping 192.168.1.222
Pinging 192.168.1.222 with 32 bytes of data:
Reply from 192.168.1.222: Destination Host unreachable.
Reply from 192.168.1.222: Destination Host unreachable.
Reply from 192.168.1.222: Destination Host unreachable.
Ping statistics for 192.168.1.222:
Packets: Sent = 3, Received = 3, Lost = 0 (0% loss)
応答がない場合でも、エラーレベルは0
に設定されます。
私がしようとしているのは、リモートマシンがpingに応答しているかどうかを調べることです。私のテストの1つは、マシンの電源を切り、pingを実行することです。何らかの理由で、pingはerrorlevelを0
に設定します。
私も問題に直面し、キー "-w 20"で解決しました。キー "-w"とミリ秒数で補足されたpingは、ローカルサブネットのホストに到達できない場合に1を返します。 AFAIK、ミリ秒数は、Windowsのネットワークサブシステムが「宛先ホストに到達できません」を返した後のタイムアウトよりも小さくする必要があります。
私のPC(Windows 7)の場合:
C:> ping -w 192.168.10.22
32バイトのデータで192.168.10.22にpingを実行します。
192.168.10.2からの返信:宛先ホストに到達できません。
192.168.10.2からの応答:宛先ホストに到達できません。
192.168.10.2からの返信:宛先ホストに到達できません。
192.168.10.2からの返信:宛先ホストに到達できません。
192.168.10.22のping統計:
パケット:送信= 4、受信= 4、紛失= 0(%損失)、
C:> echo%errorlevel%
だが
C:> ping -w 2999 192.168.10.22
32バイトのデータで192.168.10.22にpingを実行します。
リクエストはタイムアウトしました。
リクエストはタイムアウトしました。
リクエストはタイムアウトしました。
リクエストはタイムアウトしました。
192.168.10.22のping統計:
パケット:送信= 4、受信= 0、紛失= 4(100%損失)、
C:> echo%errorlevel%
1
これは、宛先がローカルサブネット上にあるためです。宛先がローカルサブネットの外にある場合、予想されるRequest timed out.
が表示されます。ただし、ローカルサブネット内に存在しない宛先もReply from x.x.x.x: Destination Host unreachable.
を報告します。 このワールプールの投稿 が説明しているように、それはすべて、タイムアウトした最初のホップであるかどうかによって異なります-ローカルサブネットへのpingはシングルホップのみです。 明らかに、これは仕様によるものですany応答を受信すると、エラーレベルが0
に設定され、Host unreachable
は返信としてカウントされます。
ping
出力をfindstr
で解析する出典: http://forums.techguy.org/7318331-post3.html
以下は1回pingします(ping -n 1
)。 %1
は、バッチファイルに渡される最初のパラメータです。変数attrib
は、宛先が応答するかどうかに応じて設定されます。
echo Scanning %1
set attrib=responding
ping -n 1 %1|Findstr /I /C:"timed out" /C:"Host unreachable" /C:"could not find Host"
if %errorlevel%==0 set attrib=nonresponsive
alive という興味深いユーティリティがあります。私は試していませんが、2002年にリリースされたため、Windows 7でも機能しない可能性があります。ただし、機能する場合は、宛先ホストに到達できないときにエラーレベルが2に設定されます。しかし、私はこれを本当にお勧めしません。
これは私にとってWindows 7で動作します:
@echo off
setlocal enableextensions enabledelayedexpansion
for /f %%i in (PCS.TXT) do (
SET bHOSTUP=0
ping -n 2 %%i |find "TTL=" && SET bHOSTUP=1
IF !bHOSTUP! equ 1 (
CALL :HOSTUP %%i
) else (
CALL :HOSTDOWN %%i
)
)
:HOSTUP
echo Host UP %1
GOTO EOF
:HOSTDOWN
echo Host DOWN %1
GOTO EOF
:EOF
exit /B