如何在FOR循环中使用FINDSTR来删除注册表项?

时间:2017-10-08 08:13:35

标签: batch-file cmd

我想删除所有正在运行的计算机上的所有* .bak配置文件注册表项。 我们暂时给了每个人临时的个人资料,我们现在正试图将其删除。 .bak注册表项强制临时配置文件,人们不想要它们。

我有这个命令列出所有* .bak注册表项:

for /f %f in (windowscomputers.txt) do reg query "\\%f.mydomain.com\HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" | findstr /E bak

但这只列出了它们。我需要删除它们。

我试过删除只有一个工作站的* .bak键作为测试:

for /f %f in ('reg query "\\workstationFQDN\HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList" ^| findstr /e bak') do reg delete \\workstationFQDN\%f

以上尝试删除\\workstationFQDN\HKLM\SOFTWARE\Microsoft\Windows。即使我在路径周围"",它也会在WindowsNT之间的空格处中断。

如何在for循环中使用 findstr ,以便它在 findstr 找到的每个注册表项上执行?

之后,我需要执行嵌套for循环,以便在我的文本文件windowscomputers.txt中的每台计算机上删除 findstr 找到的每个.bak注册表项。

这是一个基本问题。我尝试使用Google搜索findstr reg query for loop,并发现了很多批处理脚本示例,我使用了tokens=delims=%~这样的选项,坦率地说明了这一点。请阅读for /?帮助文件中的内容,但不了解其用法或如何应用于我的特定需求(删除每台计算机上的每个.bak配置文件注册表项)。

我也只在cmd提示符中使用过单行。我知道如果我需要使用多个命令,例如%%f而不是%f,批处理会有一些语法差异。

1 个答案:

答案 0 :(得分:0)

尝试

for / f“delims =”%f ...

echo reg delete...只是为了安全起见)

(也 - 引用要删除的字符串)

%f被称为metavariable。元变量直接从提示符中需要一个%,但如果在批处理文件中使用则两个。

在提示符下,使用for /? |more获取有关delims=(和其他)选项的(有点神秘)文档。或者在SO上查看一些例子。

(作为批处理行)下面列出了适合我的相应按键(我无法复制你的设置)

FOR /f "tokens=1*delims=\" %%q IN ('reg query "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"') DO ECHO %%r

使用“\ machinename \”前缀“HKLM”并使用findstr过滤掉不需要的行。 %%r包含\software\...,所以您似乎只需要在此之前弹出前缀字符串\\machinename\HKLM\,并且您的命令应该可以随时使用。