无法成功运行包含以下内容的批处理文件:
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\""
批处理文件中的两个命令行有什么问题?
最佳答案:
使用以下命令覆盖每个注册表项的默认值或创建每个注册表项并从命令行添加默认值:
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 /?输出命令调用帮助,说明如何使用百分号和参数号(不带或带一个或多个修饰符)引用批处理文件参数,或使用百分号和星号引用除参数0以外的所有参数;for /?输出命令帮助,用于说明如何在windows命令行上引用带1%符号或批处理文件中带2%符号的循环变量,以及不带或带一个或多个修饰符的循环变量字符;set /?它输出命令集帮助,说明如何引用环境变量,方法是在解析命令行或整个命令块时,在每侧用一个百分号将变量名括起来,以便立即展开,或在每侧用一个感叹号将延迟展开如果完全启用了延迟的环境变量扩展。请注意,command 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且环境变量的值不超过1024个字符,则应使用命令setx将环境变量添加到windows注册表中,而不是使用上面示例中的命令reg。