本文要解决的是,在windows/DOS中执行batch批处理文件,
如果batch脚本文件中本身内容中有exit,在执行batch的cmd主窗口无法获得batch本身返回值(errolevel)的问题。
问题再现
test.bat 内容:
exit 1
在cmd窗口直接执行:
cmd> test.bat
这时因为执行了其内容直接退出了cmd主窗口,窗口会关闭。
所以用start命令。start命令会启动另一个窗口运行指定的程序或命令。
cmd> start test.bat
问题就在这里,虽然bat文件运行了,但继续调查返回值(errolevel)
的话,会发现在cmd主窗口并不反映所期待的test.bat为 1 的errolevel。
cmd> echo %errorlevel%
结果为0,或其他上一次在cmd主窗口运行命令的返回值。
解决
使用start命令的wait参数。
start /wait test.bat
继续执行:
echo %errorlevel%
可以得到期待的test.bat本身的返回值(errolevel): 1 。
/wait参数的含义是启动应用程序并等候它结束(入侵常用参数)。即在cmd主窗口运行时,不直接跳到下一个命令,而是等待所启动的另一个窗口的运行结束,并获取它的返回值。
其他小贴士:start命令 语法即参数说明
- 参考
(以上)