如何从子例程中退出批处理文件?
如果使用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