182 votes

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

C'est en gros ce que je veux dans un fichier batch. Je veux pouvoir relancer "Do Stuff" chaque fois que j'appuie sur une touche pour dépasser la "Pause".

while(true){
    Do Stuff
    Pause
}

On dirait qu'il y a seulement for boucles disponibles et aucune while boucles en lot. Comment puis-je créer une boucle infinie alors ?

6 votes

S'agit-il d'un fichier batch Windows/DOS ?

0 votes

Oui, désolé d'avoir été vague, je vais faire un addendum à l'OP.

1 votes

+1 ooops, j'ai posté sans remarquer l'autre réponse !

331voto

thkala Points 36148

Et si on utilisait de bonnes( ?) vieilles goto ?

:loop

echo Ooops

goto loop

Voir aussi ce pour un exemple plus utile.

0 votes

Pas bon :D parfois plus rapide mais jamais bon :D ok il n'y a qu'un seul bon endroit pour goto - dans la programmation la plus basse x)

0 votes

Je suis d'accord avec jave.web, vous devriez utiliser la suggestion de la boucle for ci-dessous. Vous ne devriez presque jamais utiliser goto dans votre code, même si c'est un script. Goto était cool à l'époque du GW Basic dans les années 80.

18 votes

Je ne suis pas d'accord avec jave.web - il n'y a rien de mal avec goto si vous l'utilisez correctement. Par exemple, je suis sur le point de l'utiliser pour m'assurer que le programme qui est exécuté dans la boucle se relance automatiquement s'il meurt pour une raison quelconque. Il peut cependant être judicieux de mettre une petite attente dans la boucle afin d'arrêter les attaques du processeur si mon programme meurt instantanément pour une raison quelconque.

119voto

Nabi K.A.Z. Points 311

Boucle illimitée dans une commande en ligne pour une utilisation dans cmd Les fenêtres :

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

enter image description here

11 votes

Pour utiliser cela dans un fichier batch, tapez : FOR /L %%N IN () DO @echo Oups

1 votes

C'est une réponse sous-estimée. Merci !

0 votes

Faites simplement attention aux commandes qui se terminent immédiatement, ce qui est beaucoup plus fréquent sous Windows que sous Linux :-D

70voto

jeb Points 26035

Une boucle vraiment infinie, comptant de 1 à 10 avec un incrément de 0.
Il faut une infinité d'incréments ou plus 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 boucle de type goto :loop car une boucle for n'est mise en cache qu'une seule fois au démarrage.

17 votes

C'est bien parce que ça marche aussi en le tapant à l'invite de commande. for /L %n in (1,0,2) do @echo. "hi guys"

0 votes

J'aurais aimé que cette solution ait un peu plus d'explications.

22voto

PA. Points 10538

Lire help GOTO

et essayer

:again
do it
goto again

7voto

Julito Sanchis Points 143

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 également vous occuper des erreurs

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X