批处理goto指令丢失errorlevel值。

27 浏览
0 Comments

批处理goto指令丢失errorlevel值。

考虑以下批处理文件test.bat(PC01处于关闭状态):

mkdir \\PC01\\c$\Test || goto :eof

如果我从命令行中运行该批处理文件:

> test.bat || echo 99
> if ERRORLEVEL 1 echo 55

输出就只有55,没有99。尽管有错误级别,但是“||”运算符并没有检测到它。

如果我使用“cmd /c-”运行该批处理文件

> cmd /c test.bat || echo 99
> if ERRORLEVEL 1 echo 55

输出为空。错误级别为0。

如果我移除“|| goto :eof”,一切都可以如预期地正常工作,即输出为

99 55

有谁知道这种半烤的半存在的错误级别行为是如何发生的吗?

admin 更改状态以发布 2023年5月24日
0
0 Comments

为了构建一个批处理文件解决方案,使其在使用 goto :eof 时可以设置返回代码,你可以稍微改变你的脚本。

mkdir \\\failure || goto :EXIT
echo Only on Success
exit /b
:exit
(call)

现在你可以使用

test.bat || echo Failed

唯一的缺点是丢失了错误级别。
在这种情况下,返回代码设置为 false,但错误级别始终设置为 1,由于无效的调用 (call)
目前我无法找到任何可能的方法来设置用户定义的值同时设置错误级别和返回代码。

0