- 締切済み
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ではなくタイムアウトやルータからのエラーなど、応答によって後の処理やエラー画面を変えたいのですが、どのように作るのが良いでしょうか。素人質問で申し訳ありませんが、よろしくお願い致します。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- notnot
- ベストアンサー率47% (4900/10358)
括弧を使って複数文をまとめると、文の開始時点で%変数の置き換えを行ってしまいます。いくつか方法がありますが、わかりやすいのは括弧を使わず、 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の文字列で判断すると良いのがわかると思います。
お礼
返信が遅れまして申し訳ありません。 早速使わせていただき、解決できました! ありがとうございました。助かります。