Как я могу выйти из командного файла из подпрограммы?
Если я использую команду EXIT, я просто возвращаюсь к строке, где я вызвал подпрограмму, и выполнение продолжается.
Вот пример:
@echo off
ECHO Quitting...
CALL :QUIT
ECHO Still here!
GOTO END
:QUIT
EXIT /B 1
:END
EXIT /B 0
Выход:
Quitting...
Still here!
Обновить:
Это неправильный ответ, но в итоге я сделал что-то вроде:
@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
Двухтрубный оператор:
CALL :SUBROUTINE_WITH_ERROR || GOTO HANDLE_FAIL
является сокращением для:
CALL :SUBROUTINE_WITH_ERROR
IF ERRORLEVEL 1 GOTO HANDLE_FAIL
Я все еще хотел бы знать, есть ли способ выйти непосредственно из подпрограммы, а не заставлять CALLER справиться с ситуацией, но это, по крайней мере, делает работу.
Обновление № 2: При вызове подпрограммы из другой подпрограммы, вызываемой вышеописанным способом, я вызываю подпрограмму таким образом:
CALL :SUBROUTINE_WITH_ERROR || EXIT /B 1
Таким образом, ошибка распространяется обратно до «основного», так сказать. Затем основная часть пакета может обработать ошибку с помощью обработчика ошибок GOTO: FAILURE
GOTO :EOF