为什么cmd.exe在64位计算机上具有不同的错误级别行为?

时间:2009-12-17 20:49:27

标签: batch-file cmd errorlevel

如果我创建一个名为temp.bat(例如)的批处理脚本,其中包含:

exit /b 1

当我以各种方式运行时,我的32位XP系统与64位XP系统的行为不同。

在32位上:

> temp.bat
> echo %ERRORLEVEL%
1
> cmd /c temp.bat
> echo %ERRORLEVEL%
0

在64位上:

> temp.bat
> echo %ERRORLEVEL%
1
> cmd /c temp.bat
> echo %ERRORLEVEL%
1

我搜索了cmd.exe选项,但我无法找到任何控制它如何从批处理脚本传播错误级别信息的选项。在这一点上,我无法找到任何合理的解释。

2 个答案:

答案 0 :(得分:7)

你必须小心退出/ b,因为它实际上并不能在所有实例中正常工作。例如:

temp.bat&&echo 0||echo 1

如果temp.bat包含exit / b 1,你会希望打印1,但事实并非如此。遗憾的是,真正为批处理文件设置工作退出代码的唯一方法是使用@%COMSPEC% /C exit 1作为批处理文件中的最后

答案 1 :(得分:3)

Anders的例子是它使用.bat文件。如果使用.cmd文件,则退出按文档记录。

同时拥有.bat和.cmd文件的要点似乎是向后兼容:如果它正在执行.bat文件,cmd会尝试模拟pre-NT CLI,command.com,它具有更简单的错误处理。

至少那是我的猜测。当我在.bat / .cmd上搜索官方文档时,我偶然发现了这个帖子,我似乎无法找到它。