![为什么 echo 不会改变 %ERRORLEVEL%?](https://linux22.com/image/1501624/%E4%B8%BA%E4%BB%80%E4%B9%88%20echo%20%E4%B8%8D%E4%BC%9A%E6%94%B9%E5%8F%98%20%25ERRORLEVEL%25%EF%BC%9F.png)
包含%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 确实显示错误级别,这样如果失败,我可以再次暂停并再次更新日志。