サブルーチン内からバッチファイルを終了するにはどうすればよいですか?
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