Windows批处理编程是否支持异常处理?如果没有,有没有办法有效地模拟批处理文件中的异常处理?
我希望能够在任何CALL级别的批处理脚本中的任何地方"抛出异常",并重复弹出CALL堆栈,直到它找到一个活动的"TRY块",于是"CATCH块"可以处理异常完全继续,或做一些清理并继续弹出CALL堆栈.如果永远不处理异常,则终止批处理并且控制返回到命令行上下文并显示错误消息.
已经有几种方法可以在任何CALL深度上终止批处理,但这些技术都不允许通过异常处理通常在其他语言中提供的任何结构化清理活动.
注意: 这是我已经知道最近才被发现的好答案的情况,我想分享这些信息
我的批处理文件有问题.它通过这样的方式自动构建几个程序:
所以它看起来像这样:
set FLAG=1
...
gmake all
call :interactive_check
set OTHERFLAG=1
...
gmake all
call :interactive_check
Run Code Online (Sandbox Code Playgroud)
其中有6或7个(它可能会增长).所以我创建了一个函数来检查errorlevel而不是在每一步复制/粘贴它.问题是:错误检查是通过一个函数完成的:
:interactive_check
if errorlevel 1 (
echo.
echo /!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\
echo Error in compilation process... exiting
echo /!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\/!\
echo.
cd %root_dir%
exit /B 1
) ELSE (
echo.Continuing to next step
)
goto:eof
Run Code Online (Sandbox Code Playgroud)
现在,在运行它时,exit /B 1只需退出函数,但不退出批处理文件.
你是否知道如何退出整个批处理文件而不必在每一步复制/粘贴我的"if errorlevel 1 .."?