调用批处理脚本时指定exit /b非0码却返回错误码0问题咨询
解决批处理脚本返回码不传递的问题
我太懂这个坑了!你遇到的问题本质是直接调用子批处理脚本时,系统不会自动传递它的返回码给父脚本,下面给你一步步讲清楚原因和解决办法:
为什么返回码总是0?
当你在start.bat里直接写Disclaimer.bat而不用call时,系统会把当前脚本的执行权完全转移给Disclaimer.bat。一旦Disclaimer.bat执行结束(哪怕用exit 102),父脚本start.bat也会立刻终止,而且不会捕获到子脚本的返回码,默认就会保留初始的errorlevel=0。
正确的做法:用call命令调用子脚本
只要在调用时加上call关键字,父脚本就会在子脚本执行完毕后恢复运行,并且自动把子脚本的返回码赋值给%errorlevel%变量。
修改示例:
原来的start.bat里的调用代码:
Disclaimer.bat
改成:
call Disclaimer.bat
之后你就可以在start.bat里获取返回码并做逻辑判断了,比如:
call Disclaimer.bat echo 子脚本返回码:%errorlevel% if %errorlevel% equ 102 ( echo 用户拒绝了免责声明,终止流程 exit /b 102 ) else ( echo 用户接受了声明,继续执行后续逻辑 )
关于exit和exit /b的注意事项
- 如果子脚本用
exit 102:哪怕用了call,这个命令会直接关闭整个命令行窗口(双击运行脚本的场景下),父脚本后续的代码根本没机会执行。 - 更推荐用
exit /b 102:这个命令只会退出当前子脚本,父脚本可以继续运行,并且能正确拿到返回码102。
这样修改后,你就能准确获取到Disclaimer.bat的返回码,再也不会出现明明返回了非0值却显示0的情况啦!
内容的提问来源于stack exchange,提问作者wolfen
相关产品推荐
相关产品推荐

