仅通过 REG.EXE 添加具有多个引用值的 REG_EXPAND_SZ

仅通过 REG.EXE 添加具有多个引用值的 REG_EXPAND_SZ

编辑:已解决。 需要转义所有特殊字符,并将所有包含空格的路径括在引号中。下面是可用的 CMD 代码,供参考。

reg add "HKLM\SYSTEM\ControlSet001\Services\ServiceName" /v ImagePath /t REG_EXPAND_SZ /d "\"C:\Program Files (x86)\Program Directory\ServiceName.exe\" \"?e=Access^&y=Guest^&h=sub.domain.com^&p=8041^&s=53f091fb-b92e-4716-80a3-29fafb53a253^&k=BgIAAACkAABSU0ExAAgAABEAAAALtBChA27KsME1zvRANc4%2bT14R0raas%2blcVFtdua4P03fn1qJNxFV4jNsw%2bfZrCqaut76dEO0sPsAeHpuD6m9oyGK4DOoYRvjKnsq8SYuyZvxF5%2fiUeINpqPT%2bQXUDJLBOo6oyXfj%2bFED7rS5wYFT98xPllsoD31jX%2bVlUmwXx5ll8ILGdVphd236iYxV32u%2fpnMXQHR3vr7oXZhdLp%2b3fqap96%2bbFebjhKFg03bHnbK%2fQdbeFNcwntK34oAMq%2f1PB64gAeYucxkXNTaDoLRoWceP61uKwF9IIh58svm501OCDMfwbmUsigpXS9NawISpGqbjRe9DvXP7oGX1S79aT^&t=^&c=ANEW^&c=^&c=^&c=^&c=^&c=^&c=^&c="" /f

我需要用新字符串覆盖现有的 REG_EXPAND_SZ 字符串。但是字符串的值数据有两个值,需要用引号括起来并用空格隔开。例如

"C:\Program Files (x86)\Program Directory\ServiceName.exe" "?e=Access&y=Guest&h=sub.domain.com&p=8041&s=53f091fb-b92e-4716-80a3-29fafb53a253&k=BgIAAACkAABSU0ExAAgAABEAAAALtBChA27KsME1zvRANc4%2bT14R0raas%2blcVFtdua4P03fn1qJNxFV4jNsw%2bfZrCqaut76dEO0sPsAeHpuD6m9oyGK4DOoYRvjKnsq8SYuyZvxF5%2fiUeINpqPT%2bQXUDJLBOo6oyXfj%2bFED7rS5wYFT98xPllsoD31jX%2bVlUmwXx5ll8ILGdVphd236iYxV32u%2fpnMXQHR3vr7oXZhdLp%2b3fqap96%2bbFebjhKFg03bHnbK%2fQdbeFNcwntK34oAMq%2f1PB64gAeYucxkXNTaDoLRoWceP61uKwF9IIh58svm501OCDMfwbmUsigpXS9NawISpGqbjRe9DvXP7oGX1S79aT&t=&c=ANEW&c=&c=&c=&c=&c=&c=&c="

我尝试了很多种变化但仍然出现语法错误。

我受到限制,无法使用 PowerShell 或批处理文件,只能通过 CMD 使用 REG.EXE。我真的希望有人能帮忙。

答案1

您需要使用插入符号来转义“与”符号(以避免命令处理器将它们解释为命令分隔符),并使用反斜杠来转义双引号(以避免将REG它们解释为字符串分隔符):

reg add HKCU\Path\To\Subkey /v SomeValueName /t REG_EXPAND_SZ /f /d "\"C:\some path\filename.exe\" \"?e=Access^&y=Guest...\""

您可能还需要在批处理文件中将百分号转义为两个百分号。

答案2

一些提示:

  • 使用反斜杠来转义内部双引号,如下所述 本·N。一般来说,REG 命令会将其解释\为紧随其后的字符的转义符,以用于所有有问题的字符。
  • 双引号的另一种替代方法是使用单引号 ( '),以便应用程序能够正确使用它们。
  • 在批处理文件中,百分比文字必须加倍:\"%%1\" %%*"
  • "如果使用 PowerShell,在字符串中使用不是\"而是“”。使用单引号(如果有效)更清楚。

相关内容