5

如果我制作一个名为 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 选项,但找不到任何控制它如何从批处理脚本传播错误级别信息的选项。在这一点上,我无法为这种差异找到任何合理的解释。

4

2 回答 2

8

您必须小心 exit /b 因为它实际上并非在所有情况下都能正常工作。例如:

temp.bat&&echo 0||echo 1

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

于 2009-12-19T00:52:47.740 回答
3

Anders 示例的问题在于它使用了一个 .bat 文件。如果您使用 .cmd 文件,则 exit 将按文档说明进行。

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

至少这是我的猜测。我在谷歌搜索有关 .bat/.cmd 的官方文档时偶然发现了这个线程,我似乎找不到。

于 2010-07-27T17:15:08.960 回答