我试图查询一个特定的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.