Wie kann ich eine Batch-Datei aus einem Unterprogramm heraus beenden?
Wenn ich den Befehl EXIT verwende, kehre ich einfach zu der Zeile zurück, in der ich die Unterroutine aufgerufen habe, und die Ausführung wird fortgesetzt.
Hier ist ein Beispiel:
@echo off
ECHO Quitting...
CALL :QUIT
ECHO Still here!
GOTO END
:QUIT
EXIT /B 1
:END
EXIT /B 0
Ausgabe:
Quitting...
Still here!
Aktualisieren:
Dies ist keine richtige Antwort, aber am Ende habe ich Folgendes getan:
@echo off
CALL :SUBROUTINE_WITH_ERROR || GOTO HANDLE_FAIL
ECHO You shouldn't see this!
GOTO END
:SUBROUTINE_WITH_ERROR
ECHO Simulating failure...
EXIT /B 1
:HANDLE_FAIL
ECHO FAILURE!
EXIT /B 1
:END
ECHO NORMAL EXIT!
EXIT /B 0
Die Double-Pipe-Aussage von:
CALL :SUBROUTINE_WITH_ERROR || GOTO HANDLE_FAIL
ist eine Abkürzung für:
CALL :SUBROUTINE_WITH_ERROR
IF ERRORLEVEL 1 GOTO HANDLE_FAIL
Ich würde immer noch gerne wissen, ob es eine Möglichkeit gibt, direkt aus einem Unterprogramm auszusteigen, anstatt den CALLER mit der Situation fertig werden zu lassen, aber dies erledigt zumindest die Aufgabe.
Update # 2: Beim Aufruf eines Unterprogramms aus einem anderen Unterprogramm, das wie oben beschrieben aufgerufen wurde, rufe ich aus dem Unterprogramm folgendermaßen auf:
CALL :SUBROUTINE_WITH_ERROR || EXIT /B 1
Auf diese Weise breitet sich der Fehler sozusagen bis zum "Haupt" aus. Der Hauptteil der Charge kann dann den Fehler mit der Fehlerbehandlungsroutine GOTO: FAILURE behandeln
GOTO :EOF