これは基本的にバッチファイルに必要なものです。 「一時停止」を過ぎるためにキーを押すたびに「Do Stuff」を再実行できるようにしたいです。
while(true){
Do Stuff
Pause
}
利用可能なループはfor
のみで、バッチにはwhile
はありません。それでは、どうすれば無限ループを作成できますか?
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
バージョンよりもはるかに高速であるため、本当に無限のループが必要な場合に便利です。
help GOTO
を読む
してみてください
:again
do it
goto again
それをするもう一つのよりよい方法:
:LOOP
timeout /T 1 /NOBREAK
::pause or sleep x seconds also valid
call myLabel
if not ErrorLevel 1 goto :LOOP
こうすれば間違いを大事にすることができる
これがループの使用例です。
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か空の入力を除いて忠実にそれ自身を繰り返すでしょう。