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