• ベストアンサー

順番にPINGを飛ばすバッチ

セグメント内で使用されているIPアドレスを調べるために順番にPINGを飛ばす下記のバッチを作りました。 ----------------------------------------------------- @echo off for /l %%A in (1,1,254) do (ping -n 1 192.168.1.%%A) :EOF ----------------------------------------------------- 実行すると最初の数回は正常に動作したのですが、そのうちうまく実行できなくなりました。 実行するとDOS窓が一瞬開いて、すぐに終了してしまいます。(変数を変更してみても同じです。) 内容をいじっって何回か実行していると、たまに正常動作するのですが・・・。 原因と対処法が分かる方がいらっしゃったら、教えてください。 よろしくお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • Toshi0230
  • ベストアンサー率51% (836/1635)
回答No.1

手元のWinXPで実行してみましたが、正常動作しているように見えます。ただ、構文的にdo以降のカッコはいらなかったはずです。 Windowsのヘルプにも、forの構文は以下のようにありますし。 ------------------ for /L {%% | %}variable in (start#,step#,end#) do command [CommandLineOptions] ------------------ ちなみに私の場合、こういった作業ではExpingを使用することが多いです。細かい条件を設定できますし、記録が簡単に残せるので。 ご参考まで

参考URL:
http://www.woodybells.com/exping.html

その他の回答 (3)

  • ootsu
  • ベストアンサー率46% (340/738)
回答No.4

EXPINGを使えば、同じことができてログも残せますよ。 http://www.woodybells.com/exping.html

参考URL:
http://www.woodybells.com/exping.html
  • kfir2001
  • ベストアンサー率35% (163/455)
回答No.3

いまどき、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)
回答No.2

問題を切り分けるために、まずダブルクリックで実行するのを止めましょう。 自分でDOS窓を開き、直接そのバッチを起動して、どのようなメッセージが表示されて問題が発生するのか分からなければ、対処も何もありません。 そこから次のステップを判断すべきです。 余談ですが、do以降の括弧は、つける習慣にしておくと、より複雑な処理を行う際にいいことがあるので、そのままの方がいいと思います。 コード的には、このように書く習慣にするのがベストです。 for /l %%A in (1,1,254) do ( ping -n 1 192.168.1.%%A ) これで、複数コマンドを組み合わせるのも、自在だし2000やXPであれば、遅延環境変数展開を使うことで、さらに強力な処理が可能になります。

関連するQ&A