web-dev-qa-db-fra.com

Comment créer une boucle infinie dans un fichier batch Windows?

C'est fondamentalement ce que je veux dans un fichier batch. Je veux pouvoir ré-exécuter "Do Stuff" chaque fois que j'appuie sur une touche pour aller au-delà de "Pause".

while(true){
    Do Stuff
    Pause
}

On dirait qu'il n'y a que for boucles disponibles et pas de while boucles par lot. Comment puis-je créer une boucle infinie alors?

146
sooprise

Pourquoi ne pas utiliser good (?) Old goto ?

:loop

echo Ooops

goto loop

Voir aussi this pour un exemple plus utile.

264
thkala

Une boucle vraiment infinie, comptant de 1 à 10 avec un incrément de 0.
Vous avez besoin d’infinis ou de plusieurs incréments pour atteindre le 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

Cela peut être utile si vous avez besoin d'une boucle vraiment infinie, car elle est beaucoup plus rapide qu'une version goto :loop car une boucle for est complètement mise en cache une fois au démarrage.

60
jeb

Boucle illimitée dans commande sur une ligne à utiliser dans les fenêtres cmd:

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

enter image description here

45
Nabi K.A.Z.

lire help GOTO

et essaye

:again
do it
goto again
15
PA.

Une autre meilleure façon de le faire:

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

De cette façon, vous pouvez aussi vous occuper des erreurs

4
Julito Sanchis

Voici un exemple d'utilisation de la boucle:

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

C’est le lot simple que j’utilise lorsque j’ai besoin de chiffrer n’importe quel message dans un hachage md5 sous Windows (openssl requise), et le programme se répète loyalement sauf en cas de saisie de touches Ctrl + C ou vides.

1
user1147015