Як я можу вийти з пакетного файлу з підпрограми?
Якщо я використовую команду 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
Я все одно хотів би дізнатися, чи є спосіб вийти безпосередньо з підпрограми, а не змушувати КЛІНАТА вирішувати ситуацію, але це, принаймні, робить роботу.
Оновлення №2: Коли ви запускаєте підпрограму з іншої підпрограми, викликаної вищезгаданим способом, я закликаю зсередини підпрограм таким чином:
CALL :SUBROUTINE_WITH_ERROR || EXIT /B 1
Таким чином, помилка поширюється назад до "головної", так би мовити. Основна частина партії може потім обробляти помилку за допомогою обробника помилок GOTO: FAILURE
GOTO :EOF