gpt4 book ai didi

batch-file - 批处理文件以获取特定安装的软件以及版本

转载 作者:行者123 更新时间:2023-12-03 16:30:50 25 4
gpt4 key购买 nike

我有一个脚本可以找到特定安装的软件,但我在获取软件版本时也遇到了问题。例如,假设我正在获取所有已安装 Microsoft 软件的列表。这是我迄今为止所拥有的:

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,则什么也找不到。或者,我应该在这里采取其他途径吗?

最佳答案

更换 DisplayNameDisplayVersion由于此行的工作方式,导致输出为空:

find "Microsoft" temp1.txt| find "DisplayName" > temp2.txt

该行的作用是查找 temp2.txt 中的所有行。包含 Microsoft 和 DisplayName 子字符串的文件(即,它查找名称包含 Microsoft 的产品)。带有 DisplayVersion 的行依次包含产品版本号,但不包含 Microsoft 一词,这就是您得到空输出的原因。

我可以建议几个使用 WMI 的替代解决方案:
  • 解析 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall子键使用脚本(VBScript、PowerShell 等)而不是批处理文件,因为脚本语言为文本操作提供了更好的支持。这是一个 VBScript 示例,它输出已安装的 Microsoft 产品(名称包含 Microsoft 的产品,更准确地说)的名称和版本:
    On Error Resume Next

    Const strComputer = "."
    Const HKLM = &H80000002
    Const strKeyPath = "SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall"

    Dim oReg, arrSubKeys, strProduct, strDisplayName, strVersion

    Set oReg = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
    strComputer & "\root\default:StdRegProv")

    ' Enumerate the subkeys of the Uninstall key
    oReg.EnumKey HKLM, strKeyPath, arrSubKeys
    For Each strProduct In arrSubKeys
    ' Get the product's display name
    oReg.GetStringValue HKLM, strKeyPath & "\" & strProduct, "DisplayName", strDisplayName
    ' Process only products whose name contain 'Microsoft'
    If InStr(1, strDisplayName, "Microsoft", vbTextCompare) > 0 Then
    ' Get the product's display version
    oReg.GetStringValue HKLM, strKeyPath & "\" & strProduct, "DisplayVersion", strVersion
    WScript.Echo strDisplayName & vbTab & strVersion
    End If
    Next

    用法:
    cscript //nologo productlist.vbscscript //nologo productlist.vbs > productlist.txt
  • If the software you're interested in is installed by the Windows Installer, you can get info about that software (such as the name, vendor, version etc) by querying the WMI Win32_Product class. The wmic utility lets you do this directly from the command line and batch files. Here're some examples:

    • Print the names and versions of installed software:

      wmic product get Name, Version
    • 列出所有已安装的 Microsoft 产品:
      wmic product where "Vendor like '%Microsoft%'" get Name, Version
    • 列出名称中包含 Office 的已安装产品:
      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 /?

  • 关于batch-file - 批处理文件以获取特定安装的软件以及版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1482739/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com