Jak mogę wyjść z pliku wsadowego z podprogramu?
Jeśli użyję polecenia EXIT, po prostu wracam do wiersza, w którym wywołałem podprogram, i wykonywanie jest kontynuowane.
Oto przykład:
@echo off
ECHO Quitting...
CALL :QUIT
ECHO Still here!
GOTO END
:QUIT
EXIT /B 1
:END
EXIT /B 0
Wynik:
Quitting...
Still here!
Aktualizacja:
To nie jest właściwa odpowiedź, ale ostatecznie zrobiłem coś w stylu:
@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
Instrukcja dwururowa:
CALL :SUBROUTINE_WITH_ERROR || GOTO HANDLE_FAIL
jest skrótem od:
CALL :SUBROUTINE_WITH_ERROR
IF ERRORLEVEL 1 GOTO HANDLE_FAIL
Wciąż chciałbym wiedzieć, czy istnieje sposób na wyjście bezpośrednio z podprogramu, zamiast zmuszania CALLER do poradzenia sobie z sytuacją, ale to przynajmniej załatwia sprawę.
Aktualizacja nr 2: Podczas wywoływania podprogramu z innego podprogramu, wywoływanego w powyższy sposób, wywołuję w ten sposób z podprogramów:
CALL :SUBROUTINE_WITH_ERROR || EXIT /B 1
W ten sposób błąd rozprzestrzenia się z powrotem na „główny”, że tak powiem. Główna część partii może następnie obsłużyć błąd za pomocą procedury obsługi błędów GOTO: FAILURE
GOTO :EOF