DOS批处理脚本是否有"set -e"?

mar*_*ark 9 windows batch-file

在bash中,脚本开头的"set -e"指示bash在内部任何命令的第一次失败时使整个脚本失败.

如何为Windows批处理脚本执行相同操作?

dbe*_*ham 15

Tuim的解决方案有效,但它可以更简单.

ERRORLEVEL已设置,因此无需GOTO设置ERRORLEVEL的标签.

你可以简单地使用

yourCommand || exit /b
Run Code Online (Sandbox Code Playgroud)

请注意,如果您处于CALL中间,则exit/b将仅退出当前子例程.您的脚本必须逐层退出每个CALL,直到它到达脚本的根目录.只要您还在每个CALL语句之后放置测试,这将自动发生

call :label || exit /b
Run Code Online (Sandbox Code Playgroud)

可以强制批处理脚本立即从任何CALL深度退出.请参阅如何从函数中退出批处理文件?了解更多信息.一定要阅读这两个答案.接受的答案有几个潜在的严重缺点.


Tui*_*uim 5

不是直接但您可以将以下内容添加到每个要执行的行.

|| goto :error
Run Code Online (Sandbox Code Playgroud)

然后定义错误,停止脚本.

:error
exit /b %errorlevel%
Run Code Online (Sandbox Code Playgroud)

  • +1,但还有一个更简单的解决方案。请参阅[我的答案](http://stackoverflow.com/a/13863374/1012053)。 (2认同)