【问题标题】:REG ADD "REG_MULTI_SZ" separator with escaped "\" characterREG ADD "REG_MULTI_SZ" 带有转义的 "\" 字符的分隔符
【发布时间】:2015-04-04 19:37:14
【问题描述】:

我一直在尝试使用 reg add 命令将“REG_MULT_SZ”条目添加到注册表。

示例1:

REG ADD "HKLM\SOFTWARE\TESTKEY" /v "TESTVALUE" /t "REG_MULTI_SZ" ^
   /d "TEST_ENTRY1\0TEST_ENTRY2\0TEST_ENTRY3" /f /reg:64

示例2:

REG ADD "HKLM\SOFTWARE\TESTKEY" /v "TESTVALUE" /t "REG_MULTI_SZ" /s "\0" ^
   /d "TEST_ENTRY1\0TEST_ENTRY2\0TEST_ENTRY3" /f /reg:64

示例 1 命令有效,因为该命令的默认分隔符确实是 "\0",但如果我尝试使用 /s 命令(示例 2)来设置分隔符,即使它等于默认分隔符它也不会不行。

我尝试使用 ... /s "\\\0" ... 转义 "\" 字符,但没有成功。

有人知道如何将"\" 字符传递给REG ADD "REG_MULTI_SZ" 命令/s

最好的问候,

风神

【问题讨论】:

    标签: function command-line registry add


    【解决方案1】:
    reg add /?
    
    /s       Specify one character that you use as the separator in your data
             string for REG_MULTI_SZ. If omitted, use "\0" as the separator.
    

    指定一个字符(例如),如下所示:

    REG ADD "HKLM\SOFTWARE\TESTKEY" /v "TESTVALUE" /t "REG_MULTI_SZ" /s € ^
       /d "TEST_ENTRY1€TEST_ENTRY2€TEST_ENTRY3" /f /reg:64
    

    注意^ 和新行仅用于更好的可读性,应用单行

    REG ADD "HKLM\SOFTWARE\TESTKEY" /v "TESTVALUE" /t "REG_MULTI_SZ" /s € /d "TEST_ENTRY1€TEST_ENTRY2€TEST_ENTRY3" /f /reg:64
    

    概括:如果使用reg add ... /t REG_MULTI_SZ

    • 使用默认分隔符(/s 开关省略)然后:
      • \0 用于分隔多个数据实例;
      • 数据中每一个0(零)前面没有\(反斜杠)都是按字面意思计算的。
    • 使用/s Ж 分隔符(其中Ж 是唯一的字符,即使已定义 /s 0 也要保留)然后:
      • Ж 用于分隔多个数据实例;
      • 没有机会逃避这个分隔符的命运并在数据中按字面意思使用Ж 字符。

    示例:我无法记录我对转义的解释:仅基于实验。示例:假设您应该在下一个场景中创建一个 REG_MULTI_SZ 注册表值,其中包含 _numbered 文件夹:

    test\01gen
    test\02gen
    test\03gen
    

    那么您需要覆盖默认分隔符。覆盖reg query 中的默认分隔符以及/se 开关(否则,输出可能会变得有点混乱):

    d:\bat>set "_regKey=HKCU\Software\Test Key"
    
    d:\bat>set "_regData=test\01gen€test\02gen€test\03gen"
    
    d:\bat>REG ADD "%_regKey%" /v TESTVALUE /t REG_MULTI_SZ /s € /d "%_regData%" /f /reg:64
    The operation completed successfully.
    
    d:\bat>REG QUERY "%_regKey%" /v TESTVALUE
    
    HKEY_CURRENT_USER\Software\Test Key
        TESTVALUE    REG_MULTI_SZ    test\01gen\0test\02gen\0test\03gen
    
    
    d:\bat>REG QUERY "%_regKey%" /v TESTVALUE /se @
    
    HKEY_CURRENT_USER\Software\Test Key
        TESTVALUE    REG_MULTI_SZ    test\01gen@test\02gen@test\03gen
    
    
    d:\bat>
    

    结语:一条棘手的答案之路 - 请参阅编辑历史记录 (tl;dr)。

    【讨论】:

    • 非常感谢 JosefZ 先生!我必须只使用一个字符来分隔答案。但是,如果我不使用 /s 命令使用自定义分隔符,则 reg 函数默认为 \0,这是一个组合分隔符。它是如何完成的?是用户无法复制的reg函数内部操作吗?如果用户选择使用\n作为分隔符,可以吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-05
    相关资源
    最近更新 更多