電子書籍の厳選無料作品が豊富!

windowsXPでのバッチファイル作成について質問させてください。ネットワーク機器の疎通確認をするよう以下を以下を作成しました。
<bat1>
for /L %%i in (1,1,254) do (
ping -w 50 -n 1 192.168.1.%%i
echo 192.168.1.%%i %errorlevel%
)

結果、正常応答とタイムアウトする機器があるのですが、errorlevelが全て0で返ってきてしまいます。

しかし・・・
<bat2>
ping -w 50 -n 1 192.168.1.1
echo 192.168.1.1 %errorlevel%

とした場合、タイムアウトした場合errorlevelは期待どおり1となります。これはなぜでしょうか。bat1の記述がおかしいのでしょうか。

また、本来はerrorlevelではなくタイムアウトやルータからのエラーなど、応答によって後の処理やエラー画面を変えたいのですが、どのように作るのが良いでしょうか。素人質問で申し訳ありませんが、よろしくお願い致します。

A 回答 (1件)

括弧を使って複数文をまとめると、文の開始時点で%変数の置き換えを行ってしまいます。

いくつか方法がありますが、わかりやすいのは括弧を使わず、

for /L %%i in (1,1,254) do call :sub %%i
goto :EOF

:sub
ping -w 50 -n 1 192.168.1.%1 | find "bytes=32" >NUL
echo 192.168.1.%1 %errorlevel%
とするのがいいです。

pingが失敗するパターンをいくつかやってみると上のようにbytes=32の文字列で判断すると良いのがわかると思います。
    • good
    • 0
この回答へのお礼

返信が遅れまして申し訳ありません。
早速使わせていただき、解決できました!
ありがとうございました。助かります。

お礼日時:2008/08/27 11:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!