成功后哪个cmd.exe内部命令将ERRORLEVEL清除为0?

成功后哪个cmd.exe内部命令将ERRORLEVEL清除为0?

在Windows批处理脚本中处理错误的常用方法是使用
if errorlevel 1 ...或等if %errorlevel% neq 0 ...。通常,人们希望错误处理代码保留ERRORLEVEL。

我相信所有外部命令总是会导致ERRORLEVEL被设置为某个值,因此错误处理代码必须在执行外部命令之前在环境变量中保留ERRORLEVEL。

但内部命令怎么样?问题是,一些内部命令在成功时将ERRORLEVEL清除为0,而有些则没有。而且我找不到任何指定哪些命令做什么的文档。

所以问题是,哪些内部命令成功后将ERRORLEVEL清除为0?不是关于返回的ERRORLEVEL代码的一般问题,而是关于成功结果的严格问题。

注意: 多年来我一直很好奇。所以我最终决定进行一系列实验并得出一个明确的答案。我发布此问答来分享我发现的内容。


qq_笑_17
浏览 1197回答 2
2回答

鸿蒙传说

您对CALL命令的描述不完整:CALL:如果CALLed命令没有设置它,则清除ERRORLEVEL。示例:call echo OK。检查这个小例子:@echo offcall :setTwoecho Set two: %errorlevel%call :preserveecho Preserve: %errorlevel%call echo Resetecho Reset: %errorlevel%call :subNotExists 2> NULecho Sub not exist: %errorlevel%goto :EOF:setTwoexit /B 2:preserveecho Preserveexit /B输出:Set two: 2PreservePreserve: 2ResetReset: 0Sub not exist: 1CALL 描述应该说是这样的:CALL:如果CALLed命令没有设置它,则清除ERRORLEVEL。示例:call echo OK,但如果被调用的命令是子例程,则它会保留先前的ERRORLEVEL。如果被调用的子程序不存在,则将ERRORLEVEL设置为1。
打开App,查看更多内容
随时随地看视频慕课网APP