it-swarm.dev

Come creare un ciclo infinito nel file batch di Windows?

Questo è fondamentalmente ciò che voglio in un file batch. Voglio essere in grado di rieseguire "Do Stuff" ogni volta che premo un tasto qualsiasi per andare oltre la "Pausa".

while(true){
    Do Stuff
    Pause
}

Sembra che siano disponibili solo loop for e nessun ciclo while in batch. Come posso creare un ciclo infinito allora?

141
sooprise

Che ne dici di usare un buon (?) Vecchio goto ?

:loop

echo Ooops

goto loop

Vedi anche questo per un esempio più utile.

259
thkala

Un ciclo veramente infinito, contando da 1 a 10 con incremento di 0.
Hai bisogno di infiniti o più incrementi per raggiungere il 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

Questo potrebbe essere utile se hai bisogno di un ciclo veramente infinito, poiché è molto più veloce di una versione goto :loop perché un ciclo for è memorizzato completamente nella cache una volta all'avvio.

57
jeb

Unlimited loop in comando a una riga per l'uso in cmd windows:

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

enter image description here

37
Nabi K.A.Z.

leggi help GOTO

e prova

:again
do it
goto again
13
PA.

Un altro modo migliore di farlo:

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

In questo modo puoi anche prenderti cura degli errori

3
Julito Sanchis

Ecco un esempio di utilizzo del 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

Questo è il batch semplice che utilizzo quando ho bisogno di crittografare qualsiasi messaggio in hash md5 su Windows (richiesto openssl), e il programma si può ripetere lealmente da solo eccetto che Ctrl + C o input vuoto.

0
user1147015