0

我正在尝试构建一个批处理文件,该文件将搜索位于的一组注册表项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]
4

1 回答 1

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"
于 2013-07-19T19:11:38.150 回答