Jor*_*ens 18 windows cmd batch-file exit errorlevel
我正在尝试使用该EXIT /B X命令链接一系列.bat文件以返回成功或失败,&&以及||有条件地运行下一个.bat(例如a.bat && b.bat).
无论我是打电话EXIT /B 0还是其他任何结束a.bat,a.bat && b.bat都会在之后拨打b.bat.我的理解是EXIT /B 0应该设定ERRORLEVEL=0,这是成功,所以&&应该继续.与此相对应的是,调用EXIT /B 1应该设置ERRORLEVEL=1哪个失败,所以&&应该停止.我在这里错过了什么?
琐碎的例子:
对于非批处理命令,按预期执行:
C:\> echo test|findstr test>NUL && echo yes
yes
C:\> echo test|findstr test>NUL || echo yes
C:\> echo test|findstr nope>NUL && echo yes
C:\> echo test|findstr nope>NUL || echo yes
yes
Run Code Online (Sandbox Code Playgroud)
使用EXIT /B始终将a.bat视为成功:
C:\> echo @EXIT /B 0 > a.bat
C:\> a.bat && echo yes
yes
C:\> a.bat || echo yes
C:\> echo @EXIT /B 1 > a.bat
C:\> a.bat && echo yes
yes
C:\> a.bat || echo yes
Run Code Online (Sandbox Code Playgroud)
我从a.bat退出,这样怎么能a.bat && b.bat和a.bat || b.bat像预期的那样?
所有命令都在Windows XP SP3上的cmd.exe中运行.
And*_*ers 14
如果你问我,批处理文件中的退出代码会因为这个原因而中断,但是你可以使用一个hacky解决方法.作为批处理文件的最后一行,使用:
@%COMSPEC% /C exit 1 >nul
Run Code Online (Sandbox Code Playgroud)
由于这是一个开始的实际过程,因此您将获得一个真实的流程退出代码和&&和|| 将工作.
mar*_*pet 12
它在使用call执行包含exit语句的批处理脚本时应该正常工作:
C:\>echo @EXIT /B 1 > a.bat
C:\>call a.bat && echo yes
C:\>call a.bat || echo yes
yes
Run Code Online (Sandbox Code Playgroud)
顺便说一句,它在Microsoft文档中错误地说:
在脚本或批处理文件之外使用时,调用在命令提示符下无效.