- ベストアンサー
DOSコマンドでの単純なループ処理
DOSコマンドで単純なループ処理を記述する方法を教えて下さい。 UNIXで下記のようにwhileコマンドを使用すると、 /export% While(1) ? ループ処理で実行させたいコマンドを記述 ? echo "" ? sleep 3 3秒おきにコマンドの標準出力が表示されます。 Windowsで同じようなことができたらいいなと 思うのですが、簡単な方法を知っている方がいたら 教えて下さい。
- みんなの回答 (6)
- 専門家の回答
質問者が選んだベストアンサー
ラベルと 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 キーを押せばプログラムを停止できます。
その他の回答 (5)
- ysk6406
- ベストアンサー率40% (237/589)
No.3です。補足します。 > sleep.batを呼ぶときに、callを指定しないと > 次のgoto文までいかずに処理が止まってしまいます。 DOS のバッチ機能は、UNIX のシェルと違って呼出しのネストは行われませんので、そういうものだと諦めて下さい。 (バッチからのバッチ呼出しは、Basic で言えば、GOSUB ではなく GOTO に相当します。) したがって、別のバッチを呼び出した後元の所に戻ってくるためには、call が必要となります。
- fukku22
- ベストアンサー率57% (15/26)
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
お礼
ご返事ありがとうございます。 手軽にsleep機能を使えるかなり素敵な方法だと思います。 お蔭様でうまくいきました。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
'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)
ループさせたいのでしたらgotoですね。 ただし、sleepは#1の方の書かれたとおり、ありません。 wshなりNTのリソースキットなり、自分で作ったりフリーのものを探したりといったことが必要です。
- utakataXEX
- ベストアンサー率69% (711/1018)
DOSプロンプトでのループは for /? でご確認を。(NT系のみ) でも sleep コマンドはないので、そこだけ wsh(JScript や VBScript)になります。 そうなると、結局全部 wsh でやった方が楽かも。
お礼
ご返事ありがとうございます。 以下のようにすると上手くいきました。 sleepですが、ANo.5のご意見を参考に、pingを 記述したバッチをsystem32配下に置いて使いました。 するとCtrl + C で終了できました。 以下roop.batの内容---------------- @echo off :label01 echo /************************************ echo テスト echo ************************************/ call sleep 3 goto label01 ----------------------------------- なぜかはよくわかりませんが。 sleep.batを呼ぶときに、callを指定しないと 次のgoto文までいかずに処理が止まってしまいます。