Windowsバッチファイルで無限ループを作成する方法


160

これは基本的に、バッチファイルで必要なものです。任意のキーを押して「一時停止」を通過するたびに「Do Stuff」を再実行できるようにしたい。

while(true){
    Do Stuff
    Pause
}

for利用できるwhileループはあり、バッチにはループがないようです。次に、どのようにして無限ループを作成しますか?


4
Windows / DOSバッチファイルについて質問しますか?
thkala 2011年

ああ、漠然として申し訳ありませんが、私はOPの補遺を作成します。
サプライズ

1
+1おっと、私は他の答えに気付かずに投稿しました!
PA。

することができます使用For Commandまたはリンク
scientist_7

回答:


289

good(?)oldを使ってみgotoませんか?

:loop

echo Ooops

goto loop

参照してください。このより便利なたとえば。


良くない:Dときどき速くても決して良くない:D
わかり

以下のforループの提案を使用するjave.webに同意します。スクリプトであっても、コードでgotoを使用することはほとんどありません。後藤は80年代のGWベーシックな時代にクールでした。
DoodleKana 2014

そして、cmdプロンプトから?
theonlygusti 2015年

13
jave.webには同意しません。gotoを正しく使用すれば、gotoに問題はありません。たとえば、これを使用して、ループ内で実行されるプログラムが何らかの理由で停止した場合に自動再起動することを確認します。ただし、なんらかの理由でプログラムがすぐに停止した場合は、ループで少し待機してCPUのスラッシングを停止するのが賢明です。
John Hunt

1
@theonlygusti 予想どおり、1行のコマンドとしては機能しません:lbl & echo Ooops & goto lblしかし、以下の@NicholiのコメントにはありますFOR /L (1,0,2) DO @echo Oops
JimB

77

Windows で使用する1行コマンドの無制限ループcmd

FOR /L %N IN () DO @echo Oops

ここに画像の説明を入力してください


7
これをバッチファイルタイプで使用するには:FOR / L %% N IN()DO @echo Oops
Phil Roggenbuck

これは過小評価されている答えです。ありがとうございました!
var firstName 2018年

63

0の増分で1から10までカウントする、本当に無限のループ。10
に到達するには、無限以上の増分が必要です。

for /L %%n in (1,0,10) do (
  echo do stuff
  rem ** can't be leaved with a goto (hangs)
  rem ** can't be stopped with exit /b (hangs)
  rem ** can be stopped with exit
  rem ** can be stopped with a syntax error
  call :stop
)

:stop
call :__stop 2>nul

:__stop
() creates a syntax error, quits the batch

これはgoto :loop、forループが起動時に一度完全にキャッシュされるため、バージョンよりもはるかに高速であるため、本当に無限ループが必要な場合に役立ちます。


17
コマンドプロンプトで入力するだけでも機能するので、すばらしいです。(1,0,2)の/ L%nの場合、@ echo。 "hi guys"を実行します
Nicholi 2012

このソリューションにもう少し説明が必要です。
Nelda.techspiress

19

読んだ help GOTO

してみてください

:again
do it
goto again

4

それを行う別のより良い方法:

:LOOP
timeout /T 1 /NOBREAK 
::pause or sleep x seconds also valid
call myLabel
if not ErrorLevel 1 goto :LOOP

このようにして、エラーにも対処できます


1

次にループの使用例を示します。

echo off
cls

:begin

set /P M=Input text to encode md5, press ENTER to exit: 
if %M%==%M1% goto end

echo.|set /p ="%M%" | openssl md5

set M1=%M%
Goto begin

これは、Windowsで任意のメッセージをmd5ハッシュに暗号化する必要がある場合に使用する単純なバッチです(opensslが必要)。Ctrl+ Cまたは空の入力を除いて、プログラムは忠実に繰り返されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.