Làm cách nào tôi có thể thoát một tệp bó từ bên trong chương trình con?
Nếu tôi sử dụng lệnh EXIT, tôi chỉ cần quay lại dòng mà tôi đã gọi chương trình con và tiếp tục thực hiện.
Đây là một ví dụ:
@echo off
ECHO Quitting...
CALL :QUIT
ECHO Still here!
GOTO END
:QUIT
EXIT /B 1
:END
EXIT /B 0
Đầu ra:
Quitting...
Still here!
Cập nhật:
Đây không phải là một câu trả lời thích hợp, nhưng cuối cùng tôi đã làm một cái gì đó theo dòng:
@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
Tuyên bố hai ống của:
CALL :SUBROUTINE_WITH_ERROR || GOTO HANDLE_FAIL
là viết tắt của:
CALL :SUBROUTINE_WITH_ERROR
IF ERRORLEVEL 1 GOTO HANDLE_FAIL
Tôi vẫn muốn biết liệu có cách nào để thoát trực tiếp khỏi chương trình con hơn là phải làm cho CALLER xử lý tình huống hay không, nhưng điều này ít nhất sẽ hoàn thành công việc.
Cập nhật # 2: Khi gọi một chương trình con từ bên trong một chương trình con khác, được gọi theo cách trên, tôi gọi từ trong chương trình con như vậy:
CALL :SUBROUTINE_WITH_ERROR || EXIT /B 1
Bằng cách này, lỗi lan truyền trở lại "chính", có thể nói như vậy. Phần chính của lô sau đó có thể xử lý lỗi với trình xử lý lỗi GOTO: FAILURE
GOTO :EOF