REG ADD "REG_MULTI_SZ" 带有转义“\”字符的分隔符

REG ADD "REG_MULTI_SZ" separator with escaped "\" character

我一直在尝试使用 reg add 命令向注册表添加 "REG_MULT_SZ" 条目。

示例 1:

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

示例 2:

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

示例 1 命令有效,因为该命令的默认分隔符确实是 "[=13=]",但如果我尝试使用 /s 命令(示例 2)设置分隔符,即使它是等于默认分隔符它不起作用。

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

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

此致,

风神

reg add /?

/s       Specify one character that you use as the separator in your data
         string for REG_MULTI_SZ. If omitted, use "[=10=]" 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 开关)然后:
    • [=19=]用于分隔多个数据实例;
    • 数据中每个 0(零)前无 \(反斜杠)的字面意思。
  • /s Ж分隔符(其中Ж是唯一字符,即使定义/s 0也保留)然后:
    • Ж用于分隔多个数据实例;
    • 没有机会摆脱这个分隔符的命运并在数据中按字面意义使用Ж字符。

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

testgen
testgen
testgen

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

d:\bat>set "_regKey=HKCU\Software\Test Key"

d:\bat>set "_regData=testgen€testgen€testgen"

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    testgen[=14=]testgen[=14=]testgen


d:\bat>REG QUERY "%_regKey%" /v TESTVALUE /se @

HKEY_CURRENT_USER\Software\Test Key
    TESTVALUE    REG_MULTI_SZ    testgen@testgen@testgen


d:\bat>

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