web-dev-qa-db-ja.com

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

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

while(true){
    Do Stuff
    Pause
}

利用可能なループはforのみで、バッチにはwhileはありません。それでは、どうすれば無限ループを作成できますか?

141
sooprise

古き良き(?) goto を使うのはどうですか。

:loop

echo Ooops

goto loop

より有用な例については this もご覧ください。

259
thkala

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

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

57
jeb

cmdウィンドウで使用するための1行コマンドでの無制限ループ

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

enter image description here

37
Nabi K.A.Z.

help GOTOを読む

してみてください

:again
do it
goto again
13
PA.

それをするもう一つのよりよい方法:

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

こうすれば間違いを大事にすることができる

3
Julito Sanchis

これがループの使用例です。

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か空の入力を除いて忠実にそれ自身を繰り返すでしょう。

0
user1147015