通过批处理语法查询Windowsregistry

我试图查询一个特定的registry文件夹(或任何你想调用它)来获取一些信息。

特别是HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall文件夹包含已安装软件的列表。

问题是每个软件都是通过一个随机的键值(例如{0001B4FD-9EA3-4D90-A79E-FD14BA3AB01D}来代替实际的软件(如Skype )来识别的。

这使得很难findSkype标识符,因为我需要遍历Uninstall文件夹中的所有内容,并检查DisplayName值是否与Skype (或任何其他应用程序名称)相对应。

我需要使用批处理语法…这是我迄今为止,但它在不同的计算机上performance不一样,也许我根据reg输出的一些错误的格式得到不同的variables分配? 我不知道。 我可以使用数据结构来包含任何reg输出吗? 任何事情都可以工作。

 @echo off for /f "tokens=*" %%a in ('reg query HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall') do ( for /f "tokens=2,* delims= " %%b in ('reg query %%a /v Publisher') do ( IF "%%c" == "Skype Technologies SA" ( for /f "tokens=2,* delims= " %%d in ('reg query %%a /v UninstallString') do ( echo %%e ) ) ) ) 

有一个更清洁和更安全的方式来批量实现这一点吗?

看来我更容易使用

 reg QUERY HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall /f "Skype Technologies SA" /s 

作为你的批处理文件的基础。 它产生如下简单的输出

 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{D103C4BA-F905-437A-8049-DB24763BBE36} Publisher REG_SZ Skype Technologies SA End of search: 1 match(es) found.