Как создать бесконечный цикл в пакетном файле Windows? - PullRequest
142 голосов
/ 30 марта 2011

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

while(true){
    Do Stuff
    Pause
}

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

Ответы [ 6 ]

260 голосов
/ 30 марта 2011

Как насчет использования хорошего (?) Старого goto?

:loop

echo Ooops

goto loop

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

58 голосов
/ 30 марта 2011

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

38 голосов
/ 30 декабря 2017

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

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

enter image description here

14 голосов
/ 30 марта 2011

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

и попробуйте

:again
do it
goto again
3 голосов
/ 13 апреля 2017

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

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

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

0 голосов
/ 13 января 2012

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

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 или пустого ввода.

...