• 締切済み

windowsXPでのバッチファイル作成について

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

みんなの回答

  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.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の文字列で判断すると良いのがわかると思います。

monjiko
質問者

お礼

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

関連するQ&A