Wie erstelle ich eine Endlosschleife in einer Windows-Batchdatei?


160

Dies ist im Grunde das, was ich in einer Batch-Datei möchte. Ich möchte in der Lage sein, "Do Stuff" erneut auszuführen, wenn ich eine beliebige Taste drücke, um über die "Pause" hinauszugehen.

while(true){
    Do Stuff
    Pause
}

Anscheinend sind nur forSchleifen verfügbar und keine whileSchleifen im Stapel. Wie erstelle ich dann eine Endlosschleife?


4
Fragen Sie nach einer Windows / DOS-Batchdatei?
Thkala

Ja, tut mir leid, dass ich vage bin, ich werde einen Nachtrag zum OP machen.
Sooprise

1
+1 ooops, ich habe gepostet, ohne die andere Antwort zu bemerken!
PA.

Sie können verwenden For Commandoder verknüpfen
Wissenschaftler_7

Antworten:


289

Wie wäre es mit guten (?) Alten goto?

:loop

echo Ooops

goto loop

Siehe auch dies für ein nützlicheres Beispiel.


nicht gut: D manchmal schneller, aber nie gut: D ok, es gibt nur einen guten Platz für goto - in der niedrigsten Programmierung x)
jave.web

Ich stimme jave.web zu. Sie sollten den folgenden for-Schleifenvorschlag verwenden. Sie sollten goto fast nie in Ihrem Code verwenden, auch wenn es sich um Skripte handelt. Goto war in den GW Basic-Tagen in den 80ern cool.
DoodleKana

Und von cmd prompt?
theonlygusti

13
Ich bin mit jave.web nicht einverstanden - es ist nichts falsch mit goto, wenn Sie es richtig verwenden. Zum Beispiel werde ich es verwenden, um sicherzustellen, dass das Programm, das in der Schleife ausgeführt wird, automatisch erneut erscheint, wenn es aus irgendeinem Grund stirbt. Es kann jedoch ratsam sein, eine kleine Wartezeit in die Schleife zu setzen, um das CPU-Thrashing zu stoppen, wenn mein Programm aus irgendeinem Grund sofort stirbt.
John Hunt

1
@theonlygusti Funktioniert nicht wie erwartet als einzeiliger Befehl :lbl & echo Ooops & goto lbl. aber @Nicholis Kommentar unten tut :FOR /L (1,0,2) DO @echo Oops
JimB

77

Unbegrenzte Schleife im einzeiligen Befehl zur Verwendung in cmdWindows:

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

Geben Sie hier die Bildbeschreibung ein


7
So verwenden Sie das in einem Batch-Dateityp: FOR / L %% N IN () DO @echo Hoppla
Phil Roggenbuck

Dies ist eine unterbewertete Antwort. Danke dir!
var Vorname

63

Eine wirklich unendliche Schleife, die von 1 bis 10 mit einem Inkrement von 0 zählt.
Sie benötigen unendlich oder mehr Inkremente, um die 10 zu erreichen.

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

Dies kann nützlich sein, wenn Sie eine wirklich Endlosschleife benötigen, da diese viel schneller als eine goto :loopVersion ist, da eine for-Schleife beim Start einmal vollständig zwischengespeichert wird.


17
Schön, weil es auch funktioniert, wenn man es einfach an der Eingabeaufforderung eingibt. für / L% n in (1,0,2) do @echo. "Hallo Leute"
Nicholi

Ich wünschte, diese Lösung hätte etwas mehr Erklärung.
Nelda.techspiress

19

lesen help GOTO

und versuche

:again
do it
goto again

4

Eine andere bessere Möglichkeit:

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

Auf diese Weise können Sie auch Fehler beheben


1

Hier ist ein Beispiel für die Verwendung der Schleife:

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

Dies ist der einfache Stapel, den ich verwende, wenn ich eine Nachricht unter Windows in md5-Hash verschlüsseln muss (openssl erforderlich), und das Programm würde sich loyal wiederholen, außer wenn Strg + C oder leere Eingaben gegeben sind.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.