:EOF
ist ein vordefiniertes Etikett, wie Microsoft in der Dokumentation für den Befehl GOTO erklärt. Die Hilfeausgabe durch Ausführen in einem Eingabeaufforderungsfenster goto /?
erklärt auch dieses spezielle Etikett für End Of File. Dieses vordefinierte Label wird jedoch nur unterstützt, wenn die Befehlserweiterungen standardmäßig aktiviert sind.
Die Hilfe Ausgabe von in einem Eingabeaufforderungsfenster ausgeführt call /?
und natürlich auch die Dokumentation für den Befehl CALL erklärt beide, dass goto :EOF
mit call :Label
genannt einem Unterprogramm beenden verwendet werden soll.
Eine Subroutine ist nichts anderes als eine andere Batch-Datei, die in die aktuelle Batch-Datei eingebettet ist und mit dem Befehl call
aufgerufen wird. Wenn sich das Unterprogramm am Ende der Stapeldatei befindet, markiert das reale Ende der Datei das Ende des Unterprogramms.
Aber es kann mehrere Unterprogramme in einer Batchdatei geben.
Es wird also ein Befehl benötigt, damit der Befehlsinterpreter das Unterprogramm beim Erreichen einer bestimmten Zeile in der Befehlsverarbeitung verlassen und zum aufrufenden Befehlsprozess zurückkehren kann. goto :EOF
sowie exit /B
können überall verwendet werden, um entweder ein Unterprogramm zu verlassen oder die aktuelle Stapelverarbeitung zu beenden.
Im Batch-Code in Frage der erstegoto :EOF
wird benötigt, um Ausgang Batch-Datei Verarbeitung ohne einen unerwünschten Rückgang bis zum Unterprogramm-Code nach der Schleife beenden.
Die zweitegoto :EOF
in Chargenbezeichnung von Frages für das Unterprogramm verlass und weiterhin die Verarbeitung in FOR-Schleife in der zweiten Linie. Die Verarbeitung der Batchdatei wird nicht beendet, sondern nur die Unterroutine.
Anmerkung 1:goto EOF
ohne Doppelpunkt setzt voraus, dass es wirklich eine Linie mit :EOF
in der Batch-Datei starten ist, das heißt, die Sprungmarke EOF
muss in der Datei vorhanden ist. goto :EOF
führt immer zum Beenden der Unterroutine/Stapelverarbeitung mit aktivierten Befehlserweiterungen, auch wenn in der Stapeldatei ein Label EOF
vorhanden ist, da eine Zeile mit :EOF
beginnt.
Anmerkung 2: Befehl EXIT ohne Parameter /B
Ergebnisse immer in unabhängigen gesamten Befehlsverarbeitung Verlassen auf Hierarchie aufrufen und unabhängig, wie der Befehl interpeter gestartet wurde mit dem Parameter /K
(halten offen, wie verwendet, wenn Sie eine Eingabeaufforderung öffnen) oder mit /C
(schließen nachdem die Befehlsbearbeitung beendet wurde, wie beim Doppelklicken auf eine Batch-Datei). Daher sollte 10 ohne /B
mit Bedacht in einer Batch-Datei verwendet werden (am besten: nie).
Anmerkung 3:exit /B
nicht mit Befehlserweiterungen deaktiviert arbeiten, wie durch diesen Code demonstriert:
@echo off
setlocal DisableExtensions
echo Use command exit /B with command extensions disabled.
exit /B
Ausführung dieser Batch-Datei aus einem Fenster der Eingabeaufforderung erhalten Sie eine Ausgabe der Fehlermeldung:
Das System kann nicht die Batch-Label finden angegeben - EOF
Mit anderen Worten: exit /B
ist genau wie goto :EOF
und hängt daher auch von Befehlserweiterungen ab. ohne /B
funktioniert immer.
Anmerkung 4:ERRORLEVEL
wird nicht von goto :EOF
betroffen, aber die Microsoft GOTO Dokumentation zu diesem Thema stumm. exit /B #
setzt ERRORLEVEL
zu as documented von Microsoft. Das explizite Beenden einer Stapeldatei mit einem bestimmten Beendigungscode ist jedoch normalerweise nicht erforderlich, da weder goto :EOF
noch exit /B
den aktuellen Wert ERRORLEVEL
ändern.
Einzelheiten zu ERRORLEVEL
Verhalten siehe:
Vielen Dank! – s6398197atuser
Der Hilfetext, der beim Eingeben von 'cmd /?' Erscheint, listet "alle" Befehle auf, die durch Befehlserweiterungen bewirkt werden, aber 'exit' ist * nicht * erwähnt; Danke, dass du das gezeigt hast! – aschipfl