成功后哪个cmd.exe内部命令将ERRORLEVEL清除为0?在Windows批处理脚本中处理错误的常用方法是使用if errorlevel 1 ...或等if %errorlevel% neq 0 ...。通常,人们希望错误处理代码保留ERRORLEVEL。我相信所有外部命令总是会导致ERRORLEVEL被设置为某个值,因此错误处理代码必须在执行外部命令之前在环境变量中保留ERRORLEVEL。但内部命令怎么样?问题是,一些内部命令在成功时将ERRORLEVEL清除为0,而有些则没有。而且我找不到任何指定哪些命令做什么的文档。所以问题是,哪些内部命令成功后将ERRORLEVEL清除为0?这不是关于返回的ERRORLEVEL代码的一般问题,而是关于成功结果的严格问题。注意: 多年来我一直很好奇。所以我最终决定进行一系列实验并得出一个明确的答案。我发布此问答来分享我发现的内容。
2 回答
鸿蒙传说
TA贡献1865条经验 获得超7个赞
您对CALL命令的描述不完整:
CALL:如果CALLed命令没有设置它,则清除ERRORLEVEL。示例:call echo OK。
检查这个小例子:
@echo off
call :setTwo
echo Set two: %errorlevel%
call :preserve
echo Preserve: %errorlevel%
call echo Reset
echo Reset: %errorlevel%
call :subNotExists 2> NUL
echo Sub not exist: %errorlevel%
goto :EOF
:setTwo
exit /B 2
:preserve
echo Preserve
exit /B
输出:
Set two: 2
Preserve
Preserve: 2
Reset
Reset: 0
Sub not exist: 1
CALL 描述应该说是这样的:
CALL:如果CALLed命令没有设置它,则清除ERRORLEVEL。示例:call echo OK,但如果被调用的命令是子例程,则它会保留先前的ERRORLEVEL。如果被调用的子程序不存在,则将ERRORLEVEL设置为1。
添加回答
举报
0/150
提交
取消