批次 - 逃逸垂直条的含义|等号之前=

时间:2018-05-16 14:40:29

标签: batch-file scripting windows-scripting scripting-language

我目前正在努力理解introduction to windows batch scripting的一行:

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

... 
... SET /A errno^|=%ERROR_SOMECOMMAND_NOT_FOUND%

根据this回答,抑扬符^是一个转义字符,因此我们最终得到errno|=%ERROR_SOMECOMMAND_NOT_FOUND%。但那么这段代码在做什么呢?

在相应的文章中,作者声明这使得可以灵活地按位或多个错误号一起

好的,但我找不到任何关于批量操作的文章,如上所述......

所以,请稍微给我一点。

1 个答案:

答案 0 :(得分:4)

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

在代码中

SET /A ERROR_HELP_SCREEN=1
SET /A ERROR_SOMECOMMAND_NOT_FOUND=2
SET /A ERROR_OTHERCOMMAND_FAILED=4

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

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

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