batch-file - 链接批处理脚本时出现意外的双&符号/管道行为

标签 batch-file cmd

我的 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/

相关文章:

windows - appcfg.py 未在 cmd 提示符下运行 (Windows 7)

batch-file - 批量替换为特殊字符不起作用

Windows 使用代理从 URL 批量下载文件

python - 使用批处理将文件和文件夹复制到另一个路径

windows - 在 Windows 中合并 mkv(自动化,不使用 GUI)

windows - 在 Windows 命令行上检查主机可达性

windows - Postgres 9.0 linux命令到windows命令的转换

batch-file - 如何在文件中搜索字符串并将找到的行和下一行复制到另一个文件?

windows - 如何递归搜索文件但仅对使用批处理文件找到文件的实例进行操作?

batch-file - 嵌套 IF 中的 Windows CMD %ERRORLEVEL%