用于获取特定已安装软件及其版本的批处理文件

2023-12-05

我有一个脚本可以查找特定已安装的软件,但我在获取该软件的版本时也遇到了麻烦。例如,假设我正在获取所有已安装的 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,则什么也找不到。或者,我应该采取其他途径吗?


更换DisplayName with DisplayVersion由于该行的工作方式,导致输出为空:

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

该行的作用是查找中的所有行temp2.txt文件同时包含微软 and 显示名称子字符串(即,它查找名称包含的产品微软)。线路与显示版本依次包含产品版本号且不包含单词微软,这就是为什么你得到空输出的原因。

我可以建议一些使用的替代解决方案WMI:

  1. 解析HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall使用脚本(VBScript、PowerShell 等)而不是批处理文件创建子项,因为脚本语言为文本操作提供了更好的支持。下面是一个 VBScript 示例,它输出已安装的 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
    

    Usage:

    
    cscript //nologo productlist.vbs
    cscript //nologo productlist.vbs > productlist.txt  
  2. 如果您感兴趣的软件是由Windows安装程序,您可以通过查询 WMI 来获取有关该软件的信息(例如名称、供应商、版本等)Win32_Product班级。这wmic实用程序允许您直接从命令行和批处理文件执行此操作。以下是一些示例:

    • 打印已安装软件的名称和版本:

      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 /?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用于获取特定已安装软件及其版本的批处理文件 的相关文章

  • Windows批处理脚本启动程序并退出控制台

    我有一个用于启动程序的批处理脚本 例如notepad exe 当我双击这个批处理文件时 记事本正常启动 但是黑窗cmd谁发起的notepad exe仍然在后台 我需要做什么才能启动notepad exe并使cmd窗口消失 edit 比使用更
  • 使用包含 [模板]、[编码]、[所有者] 的批处理文件和 .sql 文件创建 Postgres 数据库

    我想使用批处理文件创建 Postgres 数据库 现在执行此操作的正常方法如下 C Program Files PostgreSQL 9 0 bin createdb exe U Myadmin MydatAbseName 上面的脚本使用默
  • 批处理文件-选择选项-设置默认选项

    在下面的示例批处理文件中 我有几个选项供用户选择 另外 我想设置一个默认选项 例如 我希望用户能够点击 ENTER 然后从我的列表中选择默认选项 我选择的 假设选项 1 谢谢您的帮助 ECHO OFF selector set input
  • 用于删除扩展名为 .bak 的文件的批处理文件

    我想批量删除磁盘上各个文件夹中的所有文件 bakc 谁能帮我 ex all c del bak s a 谢谢 它可以是单个命令 del s q f c bak
  • 无法在 cmd 中通过管道传递 cmdlet 对象

    我正在使用这个 powershell 命令来获取特定的用户配置文件 获取 WmiObject Class Win32 UserProfile Where Object LocalPath eq C Users Pela 但是当我通过调用 p
  • 如何通过批处理文件打开Windows防火墙上的端口

    有没有办法在批处理文件中通过批处理文件打开 Windows 上的特定端口 如果让安装程序为我们的服务器应用程序执行此操作 而不是让用户手动执行此操作 那就太好了 Use 执行程序 http technet microsoft com en
  • 以不可见模式运行主bat文件

    我有一个大师 bat文件有 call file1 bat call file2 bat call file3 bat call file4 bat 我想在我的 Windows Server 2008 上安排它以静默 不可见模式运行 我正在寻
  • 批处理 - 将 dir 命令的输出存储到变量 - 目录列表中

    我需要将整个目录列表存储到一个变量中 然后将所述变量作为参数传递给另一个脚本 直接或首先将 dir 的输出存储到文本文件中 然后执行如下操作 dir path todir gt temp txt set p VAR
  • 在 Windows 中使用脚本添加代理设置例外

    我使用的是 Windows 7 并且有一个在启动时初始化的代理配置 每次重新启动电脑时 我都必须重新打开代理设置并手动添加新的代理例外 IP 地址 例如每次重新启动时 www google com www yahoo com www fac
  • 如何从 Windows 批处理文件中的 ECHO 字符串中去除引号?

    我正在创建一个 Windows 批处理文件 但我必须 ECHO 一个大型复杂字符串 因此我必须在两端加上双引号 问题是引号也被回显到我正在写入的文件中 如何 ECHO 这样的字符串并去掉引号 UPDATE 我花了两天的时间研究这个问题 终于
  • 批处理 - IF ELSE 启动功能的条件无论如何都会执行

    提前抱歉 如果这里有一个线程可以回答我的问题 我从周五开始就一直在这个问题上并四处寻找 我确实发现了一些类似的问题 但我无法应用或适应这个问题 据我所知 简而言之 我有一个批处理脚本 它创建目录的文本文件 然后该脚本在目录中搜索文件 如果文
  • 包含带空格的可执行路径的环境变量是否也应包含必要的引号?

    定义环境变量时 对我来说 在 Windows 上 也许有一个更通用的准则 set MY TOOL C DevTools bin mytool exe 如果该工具位于带有空格的路径上 set MY TOOL C Program Files x
  • 我应该如何传递密码(包含特殊字符)作为命令行参数?

    我有一个部署脚本 必须将 LDAP 密码作为命令参数传递给该脚本 实际密码 foo ser ver 1 包含三个空格字符 开头 之前1 之后1 e g bin gt deployment bat LDAPPassword foo ser v
  • 如何获取%CD%的父路径

    如何获取当前 CD 的父路径 例如 ECHO CD result C Windows System32 这不起作用 ECHO CD 期望的结果 C Windows 尝试更改当前目录 然后使用 cd pushd echo cd popd
  • for循环批处理文件内的算术

    我在批处理文件中有一个 for 循环 如下所示 for y in 100 200 300 400 500 do set a x y 25 echo x 该行 set a x y 25 好像没有做任何划分 将每个 y 除以 25 的正确语法是
  • 2 批字符串问题

    1 是否有任何内置函数可以告诉我变量的内容是否仅包含大写字母 2 有没有办法查看变量是否包含字符串 例如 我想查看变量 PATH 是否包含 Ruby 对于第 1 部分 findstr就是答案 您只需使用正则表达式功能即可errorlevel
  • .bat 文件将文件排序到文件夹中

    对于我的图片集 我希望文件夹中的所有图片按日期自动分类到文件夹中 幸运的是 这些文件已经以时间戳命名 2012 07 15 12 21 06 jpg 2012 07 15 12 21 26 jpg 2012 07 16 12 12 50 j
  • 如何将 GIT 调用的输出获取到批处理脚本中的变量中?

    我有一个 git 命令来获取当前存储库的最新 SHA 如下所示 git log pretty format H n 1 我有一个 Windows 批处理脚本 我想按如下方式使用它 SET CURRENT SHA 但我不知道如何将从 git
  • 如何在批处理文件中回显换行符?

    如何从批处理文件输出中插入换行符 我想做类似的事情 echo hello nworld 这会输出 hello world Use echo hello echo echo world
  • 更改 Wi-Fi 配置文件的密码

    在我志愿服务的长期护理医院中 每个月的第一天 访客 Wi Fi 连接的密码都会更改 这给工作人员带来了大量的工作 也给患者带来了很多挫败感 其中许多人的行动能力非常有限 是的 真正的解决方案是让 IT 团队保留相同的密码 但这不会发生 大多

随机推荐