How can I exit a batch file from inside a subroutine?
If I use the EXIT command, I simply return to the line where I called the subroutine, and execution continues.
Here's an example:
@echo off
ECHO Quitting...
CALL :QUIT
ECHO Still here!
GOTO END
:QUIT
EXIT /B 1
:END
EXIT /B 0
Output:
Quitting...
Still here!
Update:
This isn't a proper answer, but I ended up doing something along the lines of:
@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
The double-pipe statement of:
CALL :SUBROUTINE_WITH_ERROR || GOTO HANDLE_FAIL
is shorthand for:
CALL :SUBROUTINE_WITH_ERROR
IF ERRORLEVEL 1 GOTO HANDLE_FAIL
I would still love to know if there's a way to exit directly from a subroutine rather than having to make the CALLER handle the situation, but this at least gets the job done.
Update #2:
When calling a subroutine from within another subroutine, called in the manner above, I call from within subroutines thusly:
CALL :SUBROUTINE_WITH_ERROR || EXIT /B 1
This way, the error propagates back up to the "main", so to speak. The main part of the batch can then handle the error with the error handler GOTO :FAILURE
Best Answer
Add this to the top of your batch file:
Then you can simply call:
EXIT [errorLevel]
if you want to exit the entire fileEXIT /B [errorLevel]
to exit the current subroutineGOTO :EOF
to exit the current subroutine