![内置 ERRORLEVEL 不再适用于 Windows Server 2008](https://linux22.com/image/576842/%E5%86%85%E7%BD%AE%20ERRORLEVEL%20%E4%B8%8D%E5%86%8D%E9%80%82%E7%94%A8%E4%BA%8E%20Windows%20Server%202008.png)
在工作中使用几台运行 Windows Server 2008 的服务器,发现我的批处理脚本不再正常失败。
简而言之,无论你给出什么退出代码,任何检查 ERRORLEVEL 的语句似乎都会通过。例如,在一个新的命令窗口中:
if ERRORLEVEL 1 echo hello
不应该打印任何内容,因为之前的退出肯定是 0。好吧,这在我的 Windows 7 桌面上运行良好,但在这些服务器上却不行。这基本上破坏了我所有的脚本。
是否有任何补丁更新或其他更改可以引入服务器以导致这种情况发生?我不是唯一拥有这些服务器管理员权限的人,但在指责之前需要更多信息!
答案1
从...移开如果错误级别。以下内容更加可靠(且可预测):
REM *** do something
%SystemRoot%\System32\robocopy.exe blah blah
set /a RC=%ERRORLEVEL%
REM *** now use the RC variable, which won't be interferred with
if %RC% == 0 goto XYZ
if %RC% == 1 goto ABC
我很感激您尝试避免重写,但我绝对推荐上述方法(当然还有 PowerShell!)。