根据ProductName值搜索和删除注册表项

时间:2013-07-19 15:36:27

标签: batch-file command-line cmd registry

我正在尝试构建一个批处理文件,该文件将搜索位于 HKEY_CLASSES_ROOT\Installer\Products\(random hex code) 的一组注册表项,目标是删除符合条件的键。

标准是ProductName == SQL

的值

我的代码:

Set RegDirectory=HKEY_CLASSES_ROOT\Installer\Products
Set regArray= an empty array

regquery RegDirectory for keys containing string "SQL" then addTo regArray

set keyToDelete=
:deleteAKey
if not keToDelete== "check if array is empty" (
    do reg delete keyToDelete
    GOTO deleteAKey
)

然后我需要重复 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\ 的过程,这些过程可能略有不同,因为这些十六进制代码被{}括起来。

我能找到的最近的东西就是这篇文章 How to find/delete a string value in the registry based on its value 但这似乎不是在一组键中搜索键的值,而只是键中的值。我发现了其他的东西,但它们不是.bat文件,通常是C ++或VB。我更喜欢.bat,因为我需要在系统稳定性并不总是允许.NET运行的环境中使用它。

编辑:

阅读评论后,我试图只提取我遇到的第一个值,删除它,然后重新运行查询。我的第一个问题是我似乎不理解REG QUERY的语法。我认为以下命令应该只返回值为ProductName的SQL注册表,但是我得到一个关于错误语法的模糊消息。 错误:语法无效。 输入 REG QUERY /? 以供使用。 有没有人知道我输错了什么?

我正在使用的语法在这里找到: http://technet.microsoft.com/en-us/library/cc742028%28v=ws.10%29.aspx

reg query HKEY_CLASSES_ROOT\Installer\Products [/v ProductName ] [/s] [/f SQL] [/d] [/t REG_SZ]

1 个答案:

答案 0 :(得分:2)

尝试使用“SQL”查找键值:

 for /f "delims=" %%a in ('reg query HKEY_CLASSES_ROOT\Installer\Products') do for /f "delims=" %%b in ('reg query "%%~a"') do echo %%b|find /i "SQL"