我想删除所有正在运行的计算机上的所有* .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
。即使我在路径周围""
,它也会在Windows
和NT
之间的空格处中断。
如何在for循环中使用 findstr ,以便它在 findstr 找到的每个注册表项上执行?
之后,我需要执行嵌套for循环,以便在我的文本文件windowscomputers.txt
中的每台计算机上删除 findstr 找到的每个.bak注册表项。
这是一个基本问题。我尝试使用Google搜索findstr reg query for loop
,并发现了很多批处理脚本示例,我使用了tokens=
,delims=
和%~
这样的选项,坦率地说明了这一点。请阅读for /?
帮助文件中的内容,但不了解其用法或如何应用于我的特定需求(删除每台计算机上的每个.bak配置文件注册表项)。
我也只在cmd提示符中使用过单行。我知道如果我需要使用多个命令,例如%%f
而不是%f
,批处理会有一些语法差异。
答案 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\
,并且您的命令应该可以随时使用。