请教批处理高手:如何用批处理检查已安装的软件

在网上有看到一个vbs脚本,可以检查系统中已安装的软件
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objTextFile = objFSO.CreateTextFile("c:\software.tsv", True)
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colSoftware = objWMIService.ExecQuery _
("Select * from Win32_Product")
For Each objSoftware in colSoftware
objTextFile.WriteLine objSoftware.Caption & vbtab & _
objSoftware.Description & vbtab & _
objSoftware.IdentifyingNumber & vbtab & _
objSoftware.InstallDate & vbtab & _
objSoftware.InstallLocation & vbtab & _
objSoftware.InstallState & vbtab & _
objSoftware.Name & vbtab & _
objSoftware.PackageCache & vbtab & _
objSoftware.SKUNumber & vbtab & _
objSoftware.Vendor & vbtab & _
objSoftware.Version
Next
objTextFile.Close

在实际测试中,发现该VBS脚本执行速度缓慢,而且在有些电脑上执行还会出错。

请问批处理高手:
如何用bat批处理检查已安装的软件?
谢谢!
千羽之城:
谢谢你的回复,结果后能否将DisplayName的值,跟在每行现有值的后面,因为有些值如:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\PROPLUS,如果只显示PROPLUS很难知道是什麽软件,但加上DisplayName键值Microsoft Office Professional Plus 2007,就很直观了。
谢谢!!!

第1个回答  2009-10-08
更新:

@echo off&setlocal enabledelayedexpansion
set n=1
type nul>op.txt
reg export HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall reg.$ >nul
for /f "delims=" %%i in ('type reg.$ ^| findstr "DisplayName ["') do (
set foo=%%~i
set foo=!foo:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\=!
set foo=!foo:DisplayName=!
set foo=!foo:"=!
If "!foo:~,1!"=="=" (echo/ !foo:~1!) else (
echo/!n! !foo!
set /a n+=1
)
)>>op.txt
start op.txt
exit本回答被提问者采纳
相似回答