我的 foo.bat 文件:
exit /b 1
我在 cmd 提示符下执行的操作:
foo.bat && echo "OK"
结果:
exit /b 1
"OK"
然而,当我使用双管时,回声不会发生:
foo.bat || echo "OK"
结果:
exit /b 1
这与我期望的 && 和 || 完全相反的行为去做。见 https://ss64.com/nt/call.html ,它说:
commandA && commandB Run commandA, if it succeeds then run commandB
和
commandA || commandB Run commandA, if it fails then run commandB
我失去理智了吗?我在这里缺少什么?
最佳答案
||
和 &&
响应上一条命令的返回码(左边最后执行的命令)。无论上下文如何,所有程序都以错误代码退出。EXIT /B 1
设置批处理 ERRORLEVEL,这是严格的 cmd.exe 概念。
返回码和 ERRORLEVEL 是 不是 同样的事情!
执行批处理文件时,如果批处理文件是通过 CALL
执行的,则退出的 ERRORLEVEL 仅作为返回码返回。 .
在没有 CALL 的情况下执行批处理文件时,&&
和 ||
响应脚本中执行的最后一个命令。EXIT /B 1
设置 ERRORLEVEL 为 1,但命令执行成功,所以返回码为 0。
当CALL
使用时,CALL 命令在脚本终止后查看 ERRORLEVEL,并将返回码设置为 ERRORLEVEL。
关于batch-file - 链接批处理脚本时出现意外的双&符号/管道行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57515837/