【问题标题】:Problems executing REG ADD inside a FOR loop in a .bat file在 .bat 文件的 FOR 循环内执行 REG ADD 时出现问题
【发布时间】:2016-09-01 10:48:35
【问题描述】:

我创建了一个批处理文件,其中包含如下一行:

REG ADD "HKCR\VLC.%%G\shell\folder1\folder2" /ve /t REG_SZ /d "\"C:\Program Files (x86)\Program\\program.exe\" \"%%1\"" /f

它可以正常工作,如果我想使用 for 循环更改多行,我会使用相同的语句得到这个错误:

\Program\program.exe\" \"%1\"" non atteso.

我尝试过使用没有空格的路径,它可以正常工作。 如何使其与带空格的路径一起使用?

【问题讨论】:

  • 你应该显示你的循环代码
  • 我注意到问题不在于空格,而是我认为被解释为循环结束的“)”。有一个转义字符可以避免这个问题吗?
  • 是的 ^ 插入符号

标签: batch-file for-loop


【解决方案1】:

正如您已经发现的那样,(x86) 的右括号有问题。
通常这在引号内不会有问题,但由于您的注册表值中也有引号,它们会破坏批处理转义。

您也可以在此处使用延迟扩展,而不是使用插入符号进行硬编码转义。

setlocal EnableDelayedExpansion
set "value="C:\Program Files (x86)\Program\program.exe" "%%1""
set "value=!value:"=\"!"
for %%a in (dummy) do (
    REG ADD "HKCR\VLC.%%G\shell\folder1\folder2" /ve /t REG_SZ /d "!value!" /f
)

【讨论】:

  • 我已经用你的代码尝试了一个批处理脚本,但最终输出是这样的:(REG ADD "HKCR\VLC.%G\shell\folder1\folder2" /ve /t REG_SZ /d "!value!" /f ) 所以它不会给出错误但!value! 的内容不会被读取。我也试过这样写(x86^),但它也不起作用
  • 你的意思是cmd.exe的调试输出吗?在那里,您永远不会看到延迟扩展的扩展值。您应该使用 regedit 检查结果
  • 非常感谢!我一直在看命令输出,以至于我从来没有让脚本编写 Windows 注册表...
猜你喜欢
  • 1970-01-01
  • 2021-03-20
  • 2021-11-16
  • 1970-01-01
  • 2020-12-26
  • 1970-01-01
  • 1970-01-01
  • 2021-12-04
  • 1970-01-01
相关资源
最近更新 更多