電子書籍の厳選無料作品が豊富!

DOSコマンドで単純なループ処理を記述する方法を教えて下さい。

UNIXで下記のようにwhileコマンドを使用すると、

/export% While(1)
? ループ処理で実行させたいコマンドを記述
? echo ""
? sleep 3

3秒おきにコマンドの標準出力が表示されます。
Windowsで同じようなことができたらいいなと
思うのですが、簡単な方法を知っている方がいたら
教えて下さい。

A 回答 (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 キーを押せばプログラムを停止できます。

参考URL:http://hp.vector.co.jp/authors/VA007219/,http:// …
    • good
    • 0
この回答へのお礼

ご返事ありがとうございます。
以下のようにすると上手くいきました。
sleepですが、ANo.5のご意見を参考に、pingを
記述したバッチをsystem32配下に置いて使いました。
するとCtrl + C で終了できました。

以下roop.batの内容----------------

@echo off
:label01
echo /************************************
echo テスト
echo ************************************/
call sleep 3
goto label01

-----------------------------------

なぜかはよくわかりませんが。
sleep.batを呼ぶときに、callを指定しないと
次のgoto文までいかずに処理が止まってしまいます。

お礼日時:2004/11/19 11:28

No.3です。

補足します。

> sleep.batを呼ぶときに、callを指定しないと
> 次のgoto文までいかずに処理が止まってしまいます。

DOS のバッチ機能は、UNIX のシェルと違って呼出しのネストは行われませんので、そういうものだと諦めて下さい。
(バッチからのバッチ呼出しは、Basic で言えば、GOSUB ではなく GOTO に相当します。)

したがって、別のバッチを呼び出した後元の所に戻ってくるためには、call が必要となります。
    • good
    • 1

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
    • good
    • 0
この回答へのお礼

ご返事ありがとうございます。
手軽にsleep機能を使えるかなり素敵な方法だと思います。

お蔭様でうまくいきました。

お礼日時:2004/11/19 11:34

'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
別ウィンドウになってしまうのが難点ですかね~
    • good
    • 0

ループさせたいのでしたらgotoですね。



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

DOSプロンプトでのループは



for /?

でご確認を。(NT系のみ)

でも sleep コマンドはないので、そこだけ wsh(JScript や VBScript)になります。

そうなると、結局全部 wsh でやった方が楽かも。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!