如何添加包含双引号和百分号的默认值的注册表项?

时间:2014-12-17 23:51:46

标签: windows batch-file cmd registry

我无法成功运行包含以下内容的批处理文件:

REG ADD HKEY_CLASSES_ROOT\hlpfile\shell\compress\command /d "compact.exe /C \"%1\"" /f

REG ADD HKEY_CLASSES_ROOT\hlpfile\shell\uncompress\command /d "compact.exe /U \"%1\"" /f

导致输出错误消息:

  

错误:无效的命令行参数。

我想创建上下文菜单元素并在Windows XP SP2上指定操作:

[HKEY_CLASSES_ROOT\hlpfile\shell\compress]

[HKEY_CLASSES_ROOT\hlpfile\shell\compress\command]
@="compact.exe /C \"%1\""

[HKEY_CLASSES_ROOT\hlpfile\shell\uncompress]

[HKEY_CLASSES_ROOT\hlpfile\shell\uncompress\command]
@="compact.exe /U \"%1\""

批处理文件中的两个命令行有什么问题?

1 个答案:

答案 0 :(得分:7)

使用以下内容覆盖每个注册表项的默认值,或创建每个注册表项并从命令行添加默认值:

REG ADD HKEY_CLASSES_ROOT\hlpfile\shell\compress\command /ve /d "\"C:\Full Path\compact.exe\" /C \"%1\"" /f
REG ADD HKEY_CLASSES_ROOT\hlpfile\shell\uncompress\command /ve /d "\"C:\Full Path\compact.exe\" /U \"%1\"" /f

在批处理文件中执行相同操作需要:

@echo off
%SystemRoot%\System32\reg.exe ADD HKEY_CLASSES_ROOT\hlpfile\shell\compress\command /ve /d "\"C:\Full Path\compact.exe\" /C \"%%1\"" /f >nul
%SystemRoot%\System32\reg.exe ADD HKEY_CLASSES_ROOT\hlpfile\shell\uncompress\command /ve /d "\"C:\Full Path\compact.exe\" /U \"%%1\"" /f >nul

要添加注册表值而不仅仅是注册表项,始终需要为密钥的默认值/ve指定/v "Name of Value"加上注册表值的类型,当然还需要要分配给注册表值的值。

在批处理文件中,必须使用额外的百分号转义百分号%,以便Windows命令处理器在执行命令,应用程序或脚本之前解析命令行,将其解释为文字字符。原因是%在批处理文件中具有特殊含义,因为它可以在命令提示符窗口中运行时看到:

  • call /?输出命令 CALL 的帮助,解释如何使用百分号和参数号来引用批处理文件参数,不带或带有一个或多个修饰符或百分号和星号引用除参数0以外的所有参数;
  • for /?输出命令 FOR 的帮助,解释如何在Windows命令行上引用一个百分号的循环变量或批处理文件中的两个百分号和循环变量字符没有或有一个或多个修饰语;
  • set /?输出命令 SET 的帮助,解释如何引用环境变量,方法是在每侧包含一个百分号的变量名,以便在解析命令行或整个命令时立即扩展如果启用了延迟环境变量扩展,则阻止或在每一侧都有一个感叹号用于延迟扩展。

请注意,命令 REG 会解析与大多数其他控制台应用程序或cmd.exe的内部命令不同的参数。如果双引号留有反斜杠,则双引号"不会被解释为参数字符串的结尾。在这种情况下,双引号被解释为文字字符,反斜杠留给它作为双引号的转义字符。有必要使用一个反斜杠来转义字符串值末尾的反斜杠,以便正确添加数据字符串。

示例:

reg add HKCU\Environment /v "Please Delete" /t REG_SZ /d "Please delete this variable with a backslash \ inside and ending with a backslash\\"

此命令将带有字符串值Please Delete的环境变量Please delete this variable with a backslash \ inside and ending with a backslash\添加到当前用户环境变量的持久列表中。不得转义数据值字符串中的反斜杠。

请注意,如果%SystemRoot%\System32\setx.exe存在,则应使用命令 SETX 将环境变量添加到Windows注册表中,而不是使用命令 REG 添加,如上例所示环境变量的值超过1024个字符。

相关问题