if errorlevel 1 ...
或 if %errorlevel% neq 0 ...
的内容。通常,人们希望错误处理代码保留 ERRORLEVEL。我相信所有外部命令在执行后都会将 ERRORLEVEL 设置为某个值,因此在执行外部命令之前,错误处理代码必须将 ERRORLEVEL 保存到环境变量中。
但是内部命令怎么办?问题是,一些内部命令在成功时将 ERRORLEVEL 清除为 0,而有些则不会。我找不到任何文件说明哪些命令会清除 ERRORLEVEL。
那么问题来了:哪些内部命令会在成功时将 ERRORLEVEL 设置为 0?这与返回的 ERRORLEVEL 代码没有关系,严格只涉及成功结果。
有一些类似“最简单的将 ERRORLEVEL 重置为零的方法是什么?”和“Windows 批处理文件:.bat vs .cmd?”的帖子给出了部分答案。但我从未见过综合性的列表。
注意: 多年来,我一直对此感到好奇。所以我最终决定进行一些实验,并得出明确的答案。我发布这个问答来分享我的发现。