Windows 批处理(Batch)脚本 for 循环中无法正确获取到命令的返回值。

Windows batch 代码

@echo on
echo ==============
for %%a in (1,2) do (
   cmd /c exit %%a
   echo errorlevel=%errorlevel%
)

运行结果:

errorlevel=0 
errorlevel=0

以上这段代码运行结果让我非常疑惑。为啥只跟 for 循环体外的命令结果有关,仿佛 for 运行那一刻其循环体内的代码中的变量值就已经固定下了。但如果把 for 看成一个命令行程序的话,输入的变量参数在运行 for 之前就固定下了,就像其他命令行程序一样,倒也说得通。

补充说明

cmd /c exit 1 这行代码只是用来替代实际环境中用的命令行程序,以一个更直观的方式返回 exit code ,更容易看到问题所在,也可以换成其它的命令行程序。
可以进入 cmd 交互式模式输入以下两行以验证效果:

cmd /c exit 1
echo %errorlevel%
阅读 2.3k
评论