【问题标题】:Batch - Meaning of escaped vertical bar | before equal sign =批处理 - 转义竖线的含义 |等号之前 =
【发布时间】:2018-10-26 16:23:32
【问题描述】:

我目前正在努力理解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% 结尾。但是这段代码在做什么呢?

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

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

所以请给我一点启发。

【问题讨论】:

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


    【解决方案1】:

    正如问题代码上面的段落所述,这是一个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

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

    ^ 是必需的,因为批处理脚本将| 视为管道,而不管上下文如何,因此SET /A errno|=%ERROR_OTHERCOMMAND_FAILED% 将引发语法错误,即使它在命令行上完全有效。

    【讨论】:

    • 只是补充一点:当引用 set /A "var=value" 对时,您不需要转义,而使用 set /A 时,您不需要包含变量名称的百分号 SET /A "errno|=ERROR_SOMECOMMAND_NOT_FOUND"
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-10
    • 1970-01-01
    • 2011-12-18
    • 2010-11-22
    • 1970-01-01
    • 2012-11-01
    相关资源
    最近更新 更多