【问题标题】:REG DELETE a value which contains quotes in it, inside a batch file?REG DELETE 一个包含引号的值,在批处理文件中?
【发布时间】:2012-10-24 01:18:59
【问题描述】:

我正在尝试删除我创建的批处理文件中的一些注册表项。

我在这里找到了以下代码,它运行良好,直到它命中 REG DELETE

for /F "tokens=1,*" %%a in ('REG QUERY "%KEY%" ^| findstr /I /C:"%VALUE%"') do (REG DELETE %KEY% /v %%a)

该值位于 [HK_CLASSES_ROOT\Installer\Assemblies\Global]
正如您可能看到的,这里的大多数值都包含引号,例如:

ADODB,fileVersion="7.10.2346.0",version="7.0.3300.00",culture="neutral",publicKeyToken="B03F5F7F11D50A3A"

这不是我想要删除的内容,但非常接近。

因此,如果我回显 %%a,它会显示值名称,因为它在 regedit 中带有引号和所有内容。 但是一旦它通过 REG DELETE(现在它要求确认),引号就不存在了,所以如果我点击是,它告诉我它找不到密钥。

显然它不能,因为它没有解析最初找到的相同内容。我一直在努力寻找解决方案,但到目前为止我还没有找到任何可以帮助我朝着正确方向前进的东西。我知道我可以在 vbs 中做同样的事情,但这是一行很长,而在 vbs 中做同样的工作会更长。

感谢您提供任何帮助,如果您需要更多信息,请随时询问,我刚刚开始处理批处理文件。我这样做是因为我每次在学校工作时都需要自动化我学校项目的所有依赖项的安装过程。(计算机被重影)

谢谢

【问题讨论】:

  • 我发现了stackoverflow.com/questions/12822801/…,这是我以前没有偶然发现的,他们建议转义引号,我将研究它以编程方式进行并更新我的答案。
  • 是的 - 我刚刚测试过,引号必须转义为\"
  • 到目前为止我有这个for /F "tokens=1,*" %%a in ('REG QUERY "%KEY%" ^| findstr /I /C:"%VALUE%"') do ( set b=%%a set b=%b:"=\"% echo REG DELETE %KEY% /v %b% ) 但似乎 b 总是空的,我认为我做错了什么,我现在正试图解决这个问题

标签: batch-file registry


【解决方案1】:

注意 - 不需要您的 "tokens=1,*",因为您只使用第一个令牌。但这也不会造成问题

正如您在评论中发现并声明的那样,引号必须转义为 \"。您可以使用环境变量搜索和替换以编程方式转义引号。由于必须在代码块中设置和扩展变量,因此必须使用延迟扩展。这是因为在解析行时会发生正常扩展,并且一次解析整个块,因此正常扩展将产生循环执行之前存在的值!。执行该行时发生延迟扩展。

@echo off
setlocal enableDelayedExpansion

::some additional code to setup KEY and VALUE

for /F %%A in ('REG QUERY "%KEY%" ^| findstr /I /C:"%VALUE%"') do (
  set val=%%A
  REG DELETE "%KEY%" /v !val:"=\"!
)

我不知道是否可以在值中包含!,但如果是,那么您必须在循环中打开和关闭延迟扩展。否则,当 %%A 包含 ! 时,它的扩展将被破坏。

@echo off
setlocal disableDelayedExpansion

::some additional code to setup KEY and VALUE

for /F %%A in ('REG QUERY "%KEY%" ^| findstr /I /C:"%VALUE%"') do (
  set val=%%A
  setlocal enableDelayedExpansion
  REG DELETE "%KEY%" /v !val:"=\"!
  endlocal
)

【讨论】:

  • 第一个成功了:)。我之前有setlocal enableDelayedExpansion,但我似乎没有找到任何使用我删除它的东西哈哈。我现在就去读一读。再次感谢您的帮助。
  • @Rayfloyd - 来自命令行的HELP SET 对延迟扩展给出了一个不错的解释。
猜你喜欢
  • 2022-01-17
  • 1970-01-01
  • 2014-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多