- ベストアンサー
順番にPINGを飛ばすバッチ
セグメント内で使用されているIPアドレスを調べるために順番にPINGを飛ばす下記のバッチを作りました。 ----------------------------------------------------- @echo off for /l %%A in (1,1,254) do (ping -n 1 192.168.1.%%A) :EOF ----------------------------------------------------- 実行すると最初の数回は正常に動作したのですが、そのうちうまく実行できなくなりました。 実行するとDOS窓が一瞬開いて、すぐに終了してしまいます。(変数を変更してみても同じです。) 内容をいじっって何回か実行していると、たまに正常動作するのですが・・・。 原因と対処法が分かる方がいらっしゃったら、教えてください。 よろしくお願い致します。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
手元のWinXPで実行してみましたが、正常動作しているように見えます。ただ、構文的にdo以降のカッコはいらなかったはずです。 Windowsのヘルプにも、forの構文は以下のようにありますし。 ------------------ for /L {%% | %}variable in (start#,step#,end#) do command [CommandLineOptions] ------------------ ちなみに私の場合、こういった作業ではExpingを使用することが多いです。細かい条件を設定できますし、記録が簡単に残せるので。 ご参考まで
その他の回答 (3)
- ootsu
- ベストアンサー率46% (340/738)
EXPINGを使えば、同じことができてログも残せますよ。 http://www.woodybells.com/exping.html
- kfir2001
- ベストアンサー率35% (163/455)
いまどき、DOSのバッチで苦労するのはナンセンスだと思います。 私なら、もっと単純にします。 @echo off ping -n 1 192.168.1.1 ping -n 1 192.168.1.2 ping -n 1 192.168.1.3 … ping -n 1 192.168.1.254 たった254行です。
- you-m
- ベストアンサー率58% (190/327)
問題を切り分けるために、まずダブルクリックで実行するのを止めましょう。 自分でDOS窓を開き、直接そのバッチを起動して、どのようなメッセージが表示されて問題が発生するのか分からなければ、対処も何もありません。 そこから次のステップを判断すべきです。 余談ですが、do以降の括弧は、つける習慣にしておくと、より複雑な処理を行う際にいいことがあるので、そのままの方がいいと思います。 コード的には、このように書く習慣にするのがベストです。 for /l %%A in (1,1,254) do ( ping -n 1 192.168.1.%%A ) これで、複数コマンドを組み合わせるのも、自在だし2000やXPであれば、遅延環境変数展開を使うことで、さらに強力な処理が可能になります。