在Windows中使用批处理脚本添加需要引号的数据的注册表键

14

小 Willis 在这里。我正在尝试使用批处理脚本编辑一个现有的注册表键,用于双击 .jar 文件时使用。问题是,我要输入的数据中包含引号,但我也需要引号来表示它是一个字符串。

例如:

reg add "HKEY_LOCAL_MACHINE\Software\Classes\jarfile\shell\open\command" /v "" /t REG_EXPAND_SZ /d "C:\Program Files\Java\jre7\bin\javaw.exe" -jar "%1" %* /f

当我在批处理脚本中运行时,cmd窗口会打印出“错误:命令行参数太多”。
因此,为了简单起见,我想添加一个注册表键,其中包括带有引号的“C:\Program Files\Java\jre7\bin\javaw.exe” -jar“%1”%*的数据,以及%1和%*正好如它们所是,不转换为任何实际语句或字符串。
编辑:
通常使用以下命令行字符串添加注册表:
ftype jarfile="C:\Program Files\Java\jre7\bin\javaw.exe" -jar "%1" %*  

在命令行中它可以正常工作,但是当我在批处理脚本中使用以下代码时,"%1"和%*不会出现。

4个回答

22

使用反斜杠转义内部的引号,例如:

reg add "HKEY_LOCAL_MACHINE\Software\Classes\jarfile\shell\open\command" /v "" /t REG_EXPAND_SZ /d "\"C:\Program Files\Java\jre7\bin\javaw.exe\" -jar \"%1\" %*" /f

你回答了我的问题的一半。你提供给我的输出是 "C:\Program Files\Java\jre7\bin\javaw.exe" -jar "" " /f,而不是 "C:\Program Files\Java\jre7\bin\javaw.exe" -jar "%1" %*。 - Trey
好的。我在/f之前加了引号,现在它不再询问我是否要覆盖现有的注册表键,但输出仍然相对相同。 "C:\Program Files\Java\jre7\bin\javaw.exe" -jar "" "%1" 只变成了"",而%*没有出现。 - Trey
不确定为什么这个不起作用。作为替代方案,你可以使用regedit.exe右键菜单导出所需的注册表键,并在批处理文件中使用"reg restore"来恢复该键。这样可以节省一些麻烦。检查导出的文件还可以给你一个关于如何格式化"reg add"的线索。 - Marc

15

批处理文件中的百分号需要加倍:\"%%1\" %%*


非常感谢!现在完美运行了。 - Trey
不错的点拨,dbenham。从命令行运行与批处理文件解释了百分比问题。 - Marc

3
作为对 dbenham 答案的补充,你应该在路径中使用反斜杠和引号!(我的意思是,你应该使用 "\"C:\Program Files....." 而不是 "C:\Program Files.....")
因此,这是典型百分号添加问题的最终答案:
reg add "HKEY_LOCAL_MACHINE\Software\Classes\jarfile\shell\open\command" /v "" /t REG_EXPAND_SZ /d "\"C:\Program Files\Java\jre7\bin\javaw.exe\" -jar \"%%1\"" /f

感谢dbenham!


1

另一种选择是使用单引号,某些应用程序可以正确读取它,例如:

reg add "HKEY_LOCAL_MACHINE\Software\Classes\jarfile\shell\open\command" /v "" /t REG_EXPAND_SZ /d "'C:\Program Files\Java\jre7\bin\javaw.exe\' -jar '%1' %*" /f

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接