Batch file 使用for循环批量删除完整注册表项

Batch file 使用for循环批量删除完整注册表项,batch-file,Batch File,我可以使用以下方法查找注册表项: REG Query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData /F "Need removed manually Add-In" /S 但此结果包含子键: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Co

我可以使用以下方法查找注册表项:

REG Query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData /F "Need removed manually Add-In" /S
但此结果包含子键:

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components\145BA990C18DA984499E1D1F9A1BD64D
    BB02C99E89C99CD4A8CC6A7AA7576194    REG_SZ    C:\Program Files (x86)\Need removed manually Add-In\SimonFell\PocketSoap\psDime.dll

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components\37AC9AD16C5204A4D9D92967A6699DEE
    BB02C99E89C99CD4A8CC6A7AA7576194    REG_SZ    C:\Program Files (x86)\Need removed manually Add-In\SimonFell\PocketSoap\pSOAP32.dll

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components\DFD1C740E6047204C8387A02138B234A
    BB02C99E89C99CD4A8CC6A7AA7576194    REG_SZ    C:\Program Files (x86)\Need removed manually Add-In\SimonFell\PocketSoap\pocketHTTP.dll

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components\F3A3DDBA307ACB945868E32C44414A5E
    BB02C99E89C99CD4A8CC6A7AA7576194    REG_SZ    C:\Program Files (x86)\Need removed manually Add-In\SimonFell\PocketSoap\psProxy.dll

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Products\BB02C99E89C99CD4A8CC6A7AA7576194\InstallProperties
    DisplayName    REG_SZ    Need removed manually Add-In
搜索结束:找到5个匹配项

当我尝试使用脚本删除时

FOR /f "delims=" %%a IN ('REG Query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData /F "Need removed manually Add-In" /S') DO REG delete "%%a" /f
我成功删除了第一个完整密钥,但在删除之后,我收到一个错误,因为脚本正在尝试删除第二行的字符串详细信息:

$ REG delete "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components\145BA990C18DA984499E1D1F9A1BD64D" /f
The operation completed successfully.

$ REG delete "    BB02C99E89C99CD4A8CC6A7AA7576194    REG_SZ    C:\Program Files (x86)\Need removed manually Add-In\SimonFell\PocketSoap\psDime.dll" /f
ERROR: Invalid key name.
Type "REG DELETE /?" for usage.

如何仅删除实际键并避免此错误?

您可以在查询中加入
findstr
,并使用
/V
单词
REG_SZ
以及搜索字符串完成消息排除

@echo off
for /f "delims=" %%a IN ('REG Query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData /F "Need removed manually Add-In" /S ^| findstr /V "REG_SZ" ^| findstr /V "End of Search"') DO echo REG delete "%%a" /f
在这里,我回显delete命令,因此您可以首先测试它。一旦满意,只需从该部分删除回显
echo REG delete“%%a”/f

…迟到的答案

我之所以包含这一点,是因为
Reg查询
正在搜索,
/F
在数据值中,
/D
,并且排除所有不包括字符串的行可能是安全的

@Echo关闭
设置“Key=HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData”
设置“Str=需要手动删除外接程序”
对于/F“Delims=“%%A In('REG Query”%Key%“/S/F”%Str%“/D^查找“HKEY””
)Do Echo=Reg删除“%%A”/F
暂停

如果您对输出感到满意,只需从倒数第二行删除
Echo=
,并可以选择删除最后一行。

如果您只搜索关键字名称,请告诉它,
REG Query“HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData”/S/F“需要手动删除外接程序”/K
如果使用此参数,则找不到注册表项…迟来的响应,这是因为您没有搜索注册表项,似乎您正在搜索值数据!我删除了最后一个“findstr/V“End of Search””,并按照我的意愿编写了脚本!需要将“搜索结束”更改为“搜索结束”