Come creare un ciclo infinito nel file batch di Windows?


160

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

while(true){
    Do Stuff
    Pause
}

Sembra che ci siano solo forloop disponibili e nessun whileloop in batch. Come faccio quindi a creare un ciclo infinito?


4
Stai chiedendo un file batch Windows / DOS?
thkala,

Sì, scusa per essere vago, farò un addendum al PO.
sooprise,

1
+1 ooops, ho pubblicato senza notare l'altra risposta!
PA.

Puoi usare For Commando collegare
scientist_7 il

Risposte:


289

Che ne dici di usare una buona (?) Vecchia goto?

:loop

echo Ooops

goto loop

Vedi anche questo per un esempio più utile.


non va bene: D a volte più veloce ma mai buono: D ok c'è solo un buon posto per andare - nella programmazione più bassa x)
jave.web

Sono d'accordo con jave.web dovresti usare il suggerimento per il ciclo qui sotto. Non dovresti quasi mai usare goto nel tuo codice anche se si tratta di script. Goto è tornato bello nei giorni di GW Basic negli anni '80.
DoodleKana,

E dal prompt di cmd?
theonlygusti,

13
Non sono d'accordo con jave.web - non c'è niente di sbagliato in goto se lo usi correttamente. Ad esempio, sto per usarlo per garantire che il programma che viene eseguito all'interno del ciclo si rigeneri automaticamente se muore per qualsiasi motivo. Potrebbe essere saggio mettere una piccola attesa nel loop per fermare il thrashing della CPU se il mio programma muore all'istante per qualche motivo.
John Hunt,

1
@theonlygusti Non funziona come un comando a una riga, come ti aspetteresti :lbl & echo Ooops & goto lbl; ma il commento di @Nicholi sotto lo fa :FOR /L (1,0,2) DO @echo Oops
JimB,

77

Ciclo illimitato nel comando a una riga per l'utilizzo in cmdWindows:

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

inserisci qui la descrizione dell'immagine


7
Per usarlo in un tipo di file batch: FOR / L %% N IN () DO @echo Oops
Phil Roggenbuck

Questa è una risposta sottovalutata. Grazie!
var firstName

63

Un ciclo davvero infinito, contando da 1 a 10 con incremento di 0.
Per raggiungere il 10 sono necessari infiniti o più incrementi.

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 loop davvero infinito, poiché è molto più veloce di una goto :loopversione perché un for-loop viene completamente memorizzato nella cache una volta all'avvio.


17
Bello perché funziona anche digitandolo al prompt dei comandi. per / L% n in (1,0,2) do @echo. "ciao ragazzi"
Nicholi,

Vorrei che questa soluzione avesse qualche spiegazione in più.
Nelda.techspiress,

19

leggere help GOTO

e prova

:again
do it
goto again

4

Un altro modo migliore per 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 occuparti anche degli errori


1

Ecco un esempio dell'uso 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 semplice batch che uso quando ho bisogno di crittografare qualsiasi messaggio nell'hash md5 su Windows (è richiesto opensl) e il programma si ripeterà lealmente se non con Ctrl + C o input vuoto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.