• ベストアンサー

順番に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

  • 連続でpingを実行するバッチファイルがうまくいきません。

    連続でpingを実行するバッチファイルを作成してたんですが、うまくいきません。 実行すると、"プロセスはファイルにアクセスできません。別のプロセスが使用中です。"って表示されます。 日付と時間はテキストに記載されるんですが、pingの結果が記載されません。 バッチファイルの内容は以下の通りです。 @echo off echo -------------->>d:\result.txt echo PINGテスト結果>>d:\result.txt echo -------------->>d:\result.txt echo 実行年月日 >>d:\result.txt date /T>>d:\result.txt echo 実行時間 >>d:\result.txt time /T>>d:\result.txt for /L %%f in (1,1,254) do ping -n 4 -w 50 192.168.100.%%f>>d:\result.txt exit コマンドプロンプトで、 for /L %f in (1,1,254) do ping -n 4 -w 50 192.168.100.%f>>d:\result.txt と実行すると、pingの結果がテキストに記載されました。 よろしくお願いします。

  • バッチファイルでPINGログ取得

    バッチファイルでPINGのログを取得したいと考えています。 下記のバッチを作成して実行してみましたが @echo off set LOG=log.log echo "------------ START -------------" >> %LOG% ping -w 1 -n 1 localhost >> %LOG% 「プロセスはファイルにアクセスできません。別のプロセスが使用中です。」とエラーメッセージが延々と表示されます。 ログにはECHOで出力したSTARTしかありません。 コマンドラインから上記のPINGを打つと正常に終了します。 使用しているOSはWinXP SP2です。 何が原因なのか解決法をご存知の方がいらっしゃいましたら宜しくお願いします。

  • バッチファイル内の各コマンドが順番に実行される条件

    Windows環境にてDOSコマンドでバッチファイルを作成して実行します。 バッチファイル内には複数のコマンドを記述しており、上から順番に 処理されて処理が完了してから次のコマンドを実行することを期待しています。 例) ping PC_NAME_A    ping PC_NAME_B 実際に実行してみて1つ目のコマンドが終了してから、2つ目の コマンドが実行されているのは確認できているのですが、 この「1つ目のコマンドが終了してから次のコマンドを実行する」という 仕様を裏付ける記事などが見つけられません。(Microsoftのサイトなど) どなたかご存知の方がいらっしゃいましたら教えてください。

  • バッチファイル

    コマンドプロンプトから実行するコマンド 2つを、100回繰り返したいのですが、 バッチファイルで100回繰り返すにはどうしたらよいでしょうか? 単純にForで出来ると思っていたのですが、 dosのバッチファイルのforはちょっと違うみたいで、ほかの言語のように for(){繰り返したい処理} ということが出来ないみたいで、 しかも変数<100というのも出来ない? ようで(INで0 1 2 3・・・のように指定するのですね・・・?) 戸惑っています。 変数を使ってインデントして100で終了させようと思ったのですが、変数も使えない・・・??のですね。(使えるのでしょうか??) そこでWSHで一セット分のコマンドのバッチファイルを作ってWSHからそれを100回呼ぼうかと思ったのですが、いまいち方法がわかりません。 また、wshの中で直接dosコマンドが使えると最もよいのですが・・・。 詳しい方がいましたら教えていただけると幸いです。

  • DOSのバッチファイルについての質問です。

    DOSのバッチファイルについての質問です。 フォルダ内のファイルネームを一括変更したいと考えています。 変更したい文字がたくさんあり、その都度インプットして処理したいと思い 下記のようなバッチを組んだのですが上手く動きません。 何かいい方法があればご教授下さい。よろしくお願いします。 echo off SET /P word= for %%a in (*%word%*) do call :sub "%%a" exit /b :sub set fname=%~1 set fname=%fname:%woad%=ああ% ren %1 "%fname%" goto :EOF

  • バッチファイルの見方について教えて下さい。

    バッチファイルを選択⇒右クリック⇒編集とすると テキストが表示されるのですが、 どういう事を書いてるのかよくわかりません。 解る方、教えて下さい。宜しくお願いします。 【pingnum.batの時】 ping 198.105.232.1 ping 198.105.232.6 @echo off echo ... echo Click the Help window to continue with the Internet troubleshooter. 実行するとdos画面でPingが実行されるのですが @echo offから下の部分はどういった意味でしょうか? echo Click the Help window to continue with the Internet は単なるメッセージ?かと思うのですが・・・。 また、下記についてもお願いします。 copyコマンドで指定したファイルを他のドライブに パスをきる時は、\\を付け加える?? A>TYPE BACK.BAT ECHO OFF CLS ECHO バックアップ ECHO ON XCOPY C:\WINDOWS\デスクトップ\コピー元\data\* C:\WINDOWS\デスクトップ\コピー先\data /E/C/H/R/Y ECHO OFF ECHO 完了しました

  • PING一斉送信(Win98で)

    Windows98上でPINGを一斉送信するバッチを作成しています。 いろいろなサイトを見て、手元のXPで以下のバッチを作成し実行するとうまく動作しました。しかし98上で動かしてみたところ、なぜか無限ループになってしまいました。 ----------------------------------------------- @cls @echo PCの応答を調べます。 @ping -n 1 -l 8 192.168.11.5>address.txt @find /c "Request timed out." address.txt>nul @if errorlevel 1 goto A1 @if errorlevel 0 goto A0 @goto END @:A1 @echo 自分のPC:OK @goto END @:A0 @echo 自分のPC:NG @:END @pause (あとはこれは端末の分だけコピペする) ------------------------------------------------ どのようにすれば98上で動くか教えていただくと助かります。よろしくお願いします。

  • pingの条件処理について。

    宜しくお願いします。 ping を利用して、その結果を条件判断し、ログに出力するバッチを作成してみました。 OS:xp、Windows Server 2003 ***TEST.bat*** rem 変数セット set log=L:\log\test.log set machine=TESTOS rem 疎通確認(50回) ping -n 50 %machine% rem 疎通確認結果の条件処理判定 if errorlevel 1 ( echo %machine% のpingが通りません。 >> %log% ) else ( echo %machine% のpingが通りました。 >> %log% ) ***TEST.bat*** ですが、これで実行すると、 何故か最初のping処理(50回)しか行われず、その後の条件判断(if ~)が実行されません。 (%log%にも出力されません) これを解決するには、どのように修正すれば良いのでしょうか? 上手く稼働確認が出来ず、困っています。 お手数をお掛けしますが、ご教授を宜しくお願いします。

  • MS-DOSのバッチファイル作成(テキストの抽出方法)について

    複数台のマシン(PC,Unix)の死活監視を行なうDOSのバッチを作成しようとしています。 バッチの内容としては、 ・管理用PCから、それぞれの監視対象マシンに対して PINGを発行し、レスポンスがあれば(0%lossの場合) OKを表示し、レスポンスが無ければ(100%lossの場  合)NGを表示するという簡単なものを考えています。 しかしながら、PINGの結果からfindでlossの行を抜き出したまでは良いのですが、"0%loss"を変数に入れて 判定するところが、うまくいきません。 ping ※※.※※※.※※.※ | find "loss" > temp.$$$ temp.$$$から"0%loss"もしくは、"100%loss"を抜き出し、変数に入れて、 if "%%a" == "(0% loss)" goto OK :OK echo OK の様にしたいと思っています。 お手数ですが、ご存知の方が居られましたら教えてください。 よろしくお願いします。

  • バッチファイルについて

    @cmd /k 上記の内容で「a.bat」というファイル名で保存しました。 この保存したファイルをダブルクリックすると、バッチファイルが格納されてるフォルダのパスがコマンドプロンプト上に表示されます。 パス表示後に、いろいろな動作(「echo~」など)を実行したいと思っているんですが、うまくいきません。 どうやら一番上の「@~」を記述したものは、そのあとに「echo~」などを記述しても実行してくれないみたいです。 「@cmd /k」実行後に何か(「echo~」など)を実行するにはどうしたらいいですか?