批处理 - 转义竖线的含义 | 等号前=

gou*_*oup 1 scripting scripting-language batch-file windows-scripting

我目前正在努力理解Windows 批处理脚本介绍

SET /A errno=0
SET /A ERROR_SOMECOMMAND_NOT_FOUND=2

... 
... SET /A errno^|=%ERROR_SOMECOMMAND_NOT_FOUND%
Run Code Online (Sandbox Code Playgroud)

根据这个答案,抑扬^符是一个转义字符,所以我们以errno|=%ERROR_SOMECOMMAND_NOT_FOUND%. 但是这段代码在做什么呢?

在相应的文章中,作者指出这提供了将多个错误编号按位或组合在一起的灵活性

好的,但是我找不到任何关于批量按位运算的文章,上面有一行...

所以,请给我一点启发。

Som*_*ark 5

正如相关代码上面的段落所述,这是一个bitwise OR运算符。它用于同时设置多个二进制标志。

在代码中

SET /A ERROR_HELP_SCREEN=1
SET /A ERROR_SOMECOMMAND_NOT_FOUND=2
SET /A ERROR_OTHERCOMMAND_FAILED=4
Run Code Online (Sandbox Code Playgroud)

ERROR_HELP_SCREEN 是 0b001 ERROR_SOMECOMMAND_NOT_FOUND 是
0b010
ERROR_OTHERCOMMAND_FAILED 是 0b100

使用按位 OR 将允许您返回类似 0b101 的内容,这意味着其他命令失败并引发帮助屏幕错误。

^是必要的,因为|无论上下文如何,批处理脚本都像管道一样对待,因此SET /A errno|=%ERROR_OTHERCOMMAND_FAILED%即使它在命令行上完全有效,也会抛出语法错误。

  • 补充一点:当引用 `set /A "var=value"` 对时,你不需要转义,使用 `set /A` 你不需要包含变量名的百分号 `SET / “错误号|=ERROR_SOMECOMMAND_NOT_FOUND”` (4认同)