REG添加带有转义“\”字符的“REG_MULTI_SZ”分隔符

时间:2015-04-04 19:37:15

标签: function command-line registry add

我一直在尝试使用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吗?

致以最诚挚的问候,

埃俄利斯

1 个答案:

答案 0 :(得分: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仍然保留),然后:
    • Ж用于分隔多个数据实例;
    • 没有机会逃脱此分隔符命运并在数据中使用Ж字符。

示例:我无法记录有关逃避的说明:仅基于实验。示例:假设您应该使用带有_numbered文件夹的下一个方案创建REG_MULTI_SZ注册表值:

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)。