Windows 7からのpingは応答を取得しませんが、errorlevelを0に設定します


10

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ます。

回答:


8

私も問題に直面し、キー「-w 2000」で解決しました。ローカルサブネット内のホストに到達できない場合、キー「-w」とミリ秒数を追加したping は1を返します。AFAIK、ミリ秒数は、Windowsのネットワークサブシステムが「Destination host unreachable」を返した後のタイムアウトよりも小さくなければなりません。

私のPC(Windows 7)の場合:
C:> ping -w 3000 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(0%損失)、

C:> echo%errorlevel%
0

だが

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


これがすべてのユースケースに有効であることを誰かが確認できますか?
user1853181

2
-wスイッチを追加する有効および無効なIPに対してスイッチを2999に設定することもテストし-n 1ました。動作しているようです。
fyrye 2015年

はい...これは、指定されたアドレスにホストがない場合にエラーレベルを設定します...ありがとう
ZEE

7

これは、宛先がローカルサブネット上にあるためです。宛先がローカルサブネットの外にある場合は、期待どおりの結果Request timed out.が得られます。ただし、ローカルサブネット内に存在しない宛先もレポートしReply from x.x.x.x: Destination host unreachable.ます。このジェットポストは、あなたのローカルサブネットにpingを実行し、単一のホップである-それを説明し、それがすべてではタイムアウトし、その最初のホップがいるかどうかに依存します。どうやら、それはデザインによってだエラーレベルに設定されていることを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に設定します。ただし、これはあまりお勧めしません。


+1はalive、まさにこの理由により、何年も前にそれを使用していました。
ブライアン

応答が「pingリクエストでホストmadeup04が見つかりませんでした。名前を確認してもう一度お試しください」の場合、これは機能しません。「ホストに到達できません」を探しているため、結果は「madeup04 is responding」となり、誤りです。
James Jenkins

1
@JamesJenkins質問のように、pingの試行はIPアドレスに対するものであると想定しました。それでも、それはささいな変更です(別の/C検索文字列を追加します)。反対票を投じる価値はほとんどありません。そのまま回答を修正しましたので、指摘いただきありがとうございます。
ボブ

ええと...それはばかげている...私のシステムがサブシステムをオンラインとして報告している理由を理解するために私の一日の半分を費やしました-それは明らかにそうではありませんでした...
Matt Clark

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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.