Batch file 批处理文件以获取特定安装的软件及其版本
我有一个脚本,可以找到特定安装的软件,但我在获取软件版本时也遇到了问题。例如,假设我正在获取所有已安装Microsoft软件的列表。以下是我迄今为止所做的:Batch file 批处理文件以获取特定安装的软件及其版本,batch-file,Batch File,我有一个脚本,可以找到特定安装的软件,但我在获取软件版本时也遇到了问题。例如,假设我正在获取所有已安装Microsoft软件的列表。以下是我迄今为止所做的: echo software installed > software_list.txt echo ================= >>software_list.txt reg export HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uni
echo software installed > software_list.txt
echo ================= >>software_list.txt
reg export HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall temp1.txt
find "Microsoft" temp1.txt| find "DisplayName" > temp2.txt
for /f "tokens=2,3 delims==" %%a in (temp2.txt) do (echo %%a >> software_list.txt)
start notepad "software_list.txt"
del temp1.txt temp2.txt
如何从reg导出中获取DisplayVersion?如果我用DisplayVersion替换DisplayName,甚至什么也找不到。或者,这里还有别的路可以走吗 [无耻地复制/粘贴@Helen的答案从这里开始] 如果您感兴趣的软件是由Windows Installer安装的,您可以通过查询WMI Win32_产品类获取有关该软件的信息(例如名称、供应商、版本等)。在批处理文件中,这可以使用WMI命令行实用程序wmic完成。以下是一些例子:
*
Print the names and versions of installed software:
wmic product get Name, Version
*
List all installed Microsoft products:
wmic product where "Vendor like '%Microsoft%'" get Name, Version
*
List installed products that have Office in their names:
wmic product where "Name like '%Office%'" get Name, Version
要将wmic输出保存到文件,可以使用/output和/或/format参数,例如:
wmic /output:software.txt product get Name, Version
wmic /output:software.htm product get Name, Version /format:htable
wmic/output:software.txt产品名称、版本
wmic/output:software.htm产品名称、版本/格式:htable
有关wmic语法的更多信息,请参阅wmic/
[结束无耻地复制/粘贴@Helen ends的答案。]
如果该软件不是由Windows Installer安装的,而不是在注册表中查找,那么您可以查找EXE本身。您需要的不仅仅是.bat文件。你需要的东西,可以打开前男友和提取版本信息
我想看一下,这是windows对.bat文件的继承。使用System.Diagnostics.FileVersionInfo.GetVersionInfo获取版本。PowerShell之外的另一种可能性(这是一种很好的方法)是将WMI与JScript或VBScript一起使用以访问软件存储。将
显示名称
替换为显示版本
会导致空输出,因为这行的工作方式:
find "Microsoft" temp1.txt| find "DisplayName" > temp2.txt
此行的作用是查找temp2.txt
文件中同时包含Microsoft和DisplayName子字符串的所有行(即,它查找名称中包含Microsoft的产品)。DisplayVersion的行依次包含产品版本号,但不包含单词Microsoft,这就是为什么会得到空输出。我可以建议使用以下几种替代解决方案:
HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall
子项,因为脚本语言对文本操作提供了更好的支持。下面是一个VBScript示例,用于输出已安装的Microsoft产品(更准确地说,其名称包含Microsoft的产品)的名称和版本:
用法:
cscript //nologo productlist.vbs
cscript //nologo productlist.vbs > productlist.txt
wmic product where "Vendor like '%Microsoft%'" get Name, Version
wmic product where "Name like '%Office%'" get Name, Version
wmic
输出保存到文件中,可以使用/output
和(可选)/format
参数,例如:
wmic /output:software.txt product get Name, Version
wmic /output:software.htm product get Name, Version /format:htable
有关wmic
语法的更多信息,请参阅wmic/?
适用于一系列计算机“阵列”的类似脚本
有没有办法获取Windows Installer安装的程序的安装路径?我的程序是一个互操作Excel加载项,只包含.dll,不包含可执行文件.exe。可以看到我的添加/删除程序和wmic产品获取名称、版本列表,但不是通过命令where@Kenny:请尝试
InstallLocation
属性,例如wmic get Name,InstallLocation
。不幸的是,InstallLocation为空。我的印象是,wmic从HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall获取信息是由于类似的属性列表。您还可以从这个注册表项中看到,许多应用程序缺少“InstallLocation”。@Kenny,我建议。x86应用程序未列出或可能仅用于“Google Chrome”
wmic /output:software.txt product get Name, Version
wmic /output:software.htm product get Name, Version /format:htable
On Error Resume Next
Const wbemFlagReturnImmediately = &h10
Const wbemFlagForwardOnly = &h20
'What Programm to look for
Const strProgram = "Microsoft"
arrComputers = Array("NAME1","Name2")
For Each strComputer In arrComputers
WScript.Echo
WScript.Echo "=========================================="
WScript.Echo "Computer: " & strComputer
WScript.Echo "=========================================="
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Product WHERE Name like '%" & strProgram & "%'")
For Each objItem In colItems
WScript.Echo "Name: " & objItem.Name & ";" & "Version: " & objItem.Version
Next
Next