• ベストアンサー

DOSコマンドでの単純なループ処理

DOSコマンドで単純なループ処理を記述する方法を教えて下さい。 UNIXで下記のようにwhileコマンドを使用すると、 /export% While(1) ? ループ処理で実行させたいコマンドを記述 ? echo "" ? sleep 3 3秒おきにコマンドの標準出力が表示されます。 Windowsで同じようなことができたらいいなと 思うのですが、簡単な方法を知っている方がいたら 教えて下さい。

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

  • ベストアンサー
  • ysk6406
  • ベストアンサー率40% (237/589)
回答No.3

ラベルと goto を使っても、できますよ。(Windows98SE で確認) 3秒待たせるためのコマンド sleep.exe は、1番目の参考 URL から入手できます。 これを使って、以下のようなサンプルプログラムを組んでみました。   @echo off   :loop   echo こんにちは   sleep 3   goto loop これで、3秒おきに「こんにちは」と表示されます。 このプログラムの欠点は CTRL-C 等で中止できないことです。 これを解決するには、2番目の参考 URL から BU というツールを入手して、例えば次のようにすると良いでしょう。   @echo off   :loop   echo こんにちは   sleep 3   bu ctrlkey   if errorlevel 1 goto end   goto loop   :end これなら、CTRL キーを押せばプログラムを停止できます。

参考URL:
http://hp.vector.co.jp/authors/VA007219/,http://hp.vector.co.jp/authors/VA000007/bu.htm
noname#139383
質問者

お礼

ご返事ありがとうございます。 以下のようにすると上手くいきました。 sleepですが、ANo.5のご意見を参考に、pingを 記述したバッチをsystem32配下に置いて使いました。 するとCtrl + C で終了できました。 以下roop.batの内容---------------- @echo off :label01 echo /************************************ echo テスト echo ************************************/ call sleep 3 goto label01 ----------------------------------- なぜかはよくわかりませんが。 sleep.batを呼ぶときに、callを指定しないと 次のgoto文までいかずに処理が止まってしまいます。

その他の回答 (5)

  • ysk6406
  • ベストアンサー率40% (237/589)
回答No.6

No.3です。補足します。 > sleep.batを呼ぶときに、callを指定しないと > 次のgoto文までいかずに処理が止まってしまいます。 DOS のバッチ機能は、UNIX のシェルと違って呼出しのネストは行われませんので、そういうものだと諦めて下さい。 (バッチからのバッチ呼出しは、Basic で言えば、GOSUB ではなく GOTO に相当します。) したがって、別のバッチを呼び出した後元の所に戻ってくるためには、call が必要となります。

  • fukku22
  • ベストアンサー率57% (15/26)
回答No.5

sleep の代わりに、ping localhost を使う手もあります。 (どこかで知りました。) 他人のPCなど、インストールとかせずにsleepしたいときは便利かもしれません。 トリビア?としてもどうぞ。 当然ですが、0.1秒単位での正確さはないと思います。 <10秒ウェイト> call sleep.bat 10 <sleep.bat> @echo off ping localhost -n 2 > nul ping localhost -n %1 > nul

noname#139383
質問者

お礼

ご返事ありがとうございます。 手軽にsleep機能を使えるかなり素敵な方法だと思います。 お蔭様でうまくいきました。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.4

'VBScriptでやってみました Set fso = WScript.CreateObject("Scripting.FileSystemObject") Set wshShell = WScript.CreateObject("WScript.shell") do while(1) ' 実行したいコマンド wshShell.Run "ping 192.168.0.1",,true '"コマンドを記入",,終了を待つ WScript.Sleep(10000) '数値はミリ秒 if fso.FileExists("QUIT.txt") then WScript.Quit '終了できる仕掛け、ファイルがあれば終了 loop 別ウィンドウになってしまうのが難点ですかね~

  • taka_tetsu
  • ベストアンサー率65% (1020/1553)
回答No.2

ループさせたいのでしたらgotoですね。 ただし、sleepは#1の方の書かれたとおり、ありません。 wshなりNTのリソースキットなり、自分で作ったりフリーのものを探したりといったことが必要です。

  • utakataXEX
  • ベストアンサー率69% (711/1018)
回答No.1

DOSプロンプトでのループは for /? でご確認を。(NT系のみ) でも sleep コマンドはないので、そこだけ wsh(JScript や VBScript)になります。 そうなると、結局全部 wsh でやった方が楽かも。

関連するQ&A