为什么批处理文件会同时解析 && 和 ||,除非第一个操作有 &?

为什么批处理文件会同时解析 && 和 ||,除非第一个操作有 &?

我正在批处理文件中运行一个命令,其中一个操作表示成功,另一个操作表示失败。问题是,除非第一个操作有,否则&它将不起作用。例如,这将不起作用,因为无论如何它都会执行这两个命令:

7z a "FILE.7z" "INPUT" ( && sounder "Success.wav" ) || ( sounder "Error.wav" & echo. & pause & exit )

甚至尝试这样做:

( 7z a "FILE.7z" "INPUT" && sounder "Success.wav" ) || ( sounder "Error.wav" & echo. & pause & exit )

但这确实有效:

7z a "FILE.7z" "INPUT" ( && sounder "Success.wav" & echo. ) || ( sounder "Error.wav" & echo. & pause & exit )

这是为什么?

我正在使用 Windows 10 和 cmd。

答案1

本网站显示此示例: commandA && commandB || commandC

如果命令 A 成功则运行命令 B,如果命令 A 失败则运行命令 C (请注意,如果命令 B 失败,也会触发运行命令 C)

基于此我相信这会有效?

7z a "FILE.7z" "INPUT" && sounder "Success.wav" || sounder "Error.wav"

至于为什么当您在一行上连接多个命令时批处理脚本非常繁琐。您可以检查命令是否产生错误(通常为 0 以外的任何错误),然后执行以下操作或执行该操作:

7z a "FILE.7z"
IF %ERRORLEVEL% NEQ 0 (sounder "Error.wav") ELSE (sounder "Error.wav")

更多阅读:

相关内容