为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

成功后哪个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。


查看完整回答
反对 回复 2019-08-28
  • 2 回答
  • 0 关注
  • 1196 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信