为什么 echo 不会改变 %ERRORLEVEL%?

为什么 echo 不会改变 %ERRORLEVEL%?

包含%ERRORLEVEL%先前运行的命令的状态代码。如果命令成功完成,则代码将为 0,否则将为其他值。因此,请考虑以下内容:

> cd foo #there is no foo
The system cannot find the path specified. #expected
> echo %ERRORLEVEL%
1 #expected
> echo %ERRORLEVEL%
1 #unexpected

为什么第二个没有echo返回0?我期望由于第一个回显已成功完成,因此%ERRORLEVEL%将更改为0,而第二个echo将打印0

答案1

这是因为只有一堆命令返回ERRORLEVEL,正如有人所说,这里有一个列表:https://stackoverflow.com/questions/34968009/which-cmd-exe-internal-commands-clear-the-errorlevel-to-0-upon-success/34968021#34968021

我不明白为什么ECHO会返回 ERRORLEVEL,因为现在还没有错误。

答案2

是的,ECHO 可能会失败。如果你有多台电脑更新一个日志文件

echo something >> \\someserver\somepath\some.log

那么 ECHO 命令可能会经常失败。我曾经使用过:

set /a rand=%random% %%59 + 1
ping 127.0.0.1 -n %rand% >NUL

尝试将 PC 隔开,但这种方法并不总是有效,有些 PC 永远不会更新日志文件。我希望 ECHO 确实显示错误级别,这样如果失败,我可以再次暂停并再次更新日志。

相关内容