Ответ 1
Как использовать хороший (?) старый goto
?
:loop
echo Ooops
goto loop
См. также этот для более полезного примера.
Это в основном то, что я хочу в пакетном файле. Я хочу иметь возможность повторно запускать "Делать вещи" всякий раз, когда я нажимаю любую клавишу, чтобы пройти мимо "Пауза".
while(true){
Do Stuff
Pause
}
Похоже, что доступны только циклы for
и нет циклов while
в пакетном режиме. Как создать бесконечный цикл?
Как использовать хороший (?) старый goto
?
:loop
echo Ooops
goto loop
См. также этот для более полезного примера.
Действительно бесконечный цикл, считая от 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 кэшируется полностью один раз при запуске.
Неограниченный цикл в однострочной команде для использования в окнах cmd
:
FOR /L %N IN () DO @echo Oops
прочитайте 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
Это простая партия, которую я использую, когда мне нужно зашифровать любое сообщение в хеш файл md5 в Windows (требуется openssl), и программа будет лояльно повторять себя, за исключением заданного Ctrl + C или пустого ввода.