ping の実行結果の場合わけ †ping の結果は以下の4通りありえる。ping -n 1 宛先 の結果を示す(空行略)。
「経路なし」は、途中のルーターから「そこから先の経路が無い」旨の応答が返る。 ERRORLEVELでの判断 †ping の結果は上記の4通りありえる。それぞれの場合について、Win2KとWinXPの ping 実行後の ERRORLEVEL の値を示す。
Win2Kではホスト名からIPアドレスを求めることができなかった時のみ、 ERRORLEVEL が 1 となり、それ以外のケースでは 0 となる。 従って ERRORLEVEL を使って応答ありの判断は出来ない。 WinXPでは応答無しの場合も ERRORLEVEL が 1 となるが、 経路なしの場合も ERRORLEVEL が 0 となるので、 経路なしという可能性がある場合、ERRORLEVELだけでは判断できない。 経路なしの可能性が無い場合、WinXPでは ERRORLEVEL で応答ありを判断できる。 応答メッセージによる判断 †上記のように、ERRORLEVEL では応答を判断できないので、 出力の文字列から判断する必要がある。 メッセージを見比べて、例えば以下のような方法が考えられる。 ping -n 1 宛先 | find "bytes=32" >NUL IF ERRORLEVEL 1 goto 失敗 ホスト名からIPアドレスを求める †nslookupを使う方法に比べると、DNSサーバー以外の hosts や lmhosts また Windowsのブロードキャストによって求まる場合もある。 set IP= for /f "tokens=1,3 delims=[] " %%A in ('ping -n 1 %HOST%') do if %%A==Pinging set IP=%%B if defined IP echo IP address of %HOST% is %IP% IPアドレスからホスト名を求める †nslookupを使う方法に比べると、DNSサーバー以外の hosts や lmhosts また Windowsのブロードキャストによって求まる場合もある。-a オプションを指定すると、 IP アドレス指定の ping でもホスト名が表示される。 set HOST= for /f "tokens=1-3" %%A in ('ping -a -n 1 %IP%') do if %%A==Pinging if not %%C==with set HOST=%%B if defined HOST echo hostname of %IP% is %HOST% |