как выйти из пакетного файла из подпрограммы?
если я использую команду 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
оператор двойной трубы of:
CALL :SUBROUTINE_WITH_ERROR || GOTO HANDLE_FAIL
это сокращенный вариант:
CALL :SUBROUTINE_WITH_ERROR
IF ERRORLEVEL 1 GOTO HANDLE_FAIL
Я все равно хотел бы знать, есть ли способ выйти непосредственно из подпрограммы, а не заставлять вызывающего абонента обрабатывать ситуацию, но это, по крайней мере, выполняет работу.
обновление #2:
При вызове подпрограммы из другой подпрограммы, вызванной указанным выше способом, я вызываю изнутри подпрограммы следующим образом:
CALL :SUBROUTINE_WITH_ERROR || EXIT /B 1
таким образом, ошибка распространяется обратно к "главный", так сказать. Основная часть пакета может обработать ошибку с помощью обработчика ошибок GOTO: FAILURE