Как создать бесконечный цикл в пакетном файле Windows?

Это в основном то, что я хочу в пакетном файле. Я хочу иметь возможность повторно запускать "Делать вещи" всякий раз, когда я нажимаю любую клавишу, чтобы пройти мимо "Пауза".

while(true){
    Do Stuff
    Pause
}

Похоже, что доступны только циклы for и нет циклов while в пакетном режиме. Как создать бесконечный цикл?

Ответ 1

Как использовать хороший (?) старый goto?

:loop

echo Ooops

goto loop

См. также этот для более полезного примера.

Ответ 2

Действительно бесконечный цикл, считая от 1 до 10 с приращением 0.
Для достижения 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-loop кэшируется полностью один раз при запуске.

Ответ 3

Неограниченный цикл в однострочной команде для использования в окнах cmd:

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

enter image description here

Ответ 4

прочитайте help GOTO

и попробуйте

:again
do it
goto again

Ответ 5

Еще один лучший способ сделать это:

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

Таким образом вы также можете позаботиться об ошибках

Ответ 6

Вот пример использования цикла:

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

Это простая партия, которую я использую, когда мне нужно зашифровать любое сообщение в хеш файл md5 в Windows (требуется openssl), и программа будет лояльно повторять себя, за исключением заданного Ctrl + C или пустого ввода.