代码之家  ›  专栏  ›  技术社区  ›  Luca Matteis

通过批处理语法查询Windows注册表

  •  2
  • Luca Matteis  · 技术社区  · 15 年前

    我正在尝试查询一个特定的注册表文件夹(或者你想称之为它的任何文件夹)以获取一些信息。

    尤其是 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall 文件夹包含已安装软件的列表。

    问题是每个软件都是通过一个随机的键值来识别的,比如 {0001B4FD-9EA3-4D90-A79E-FD14BA3AB01D} 而不是实际的软件(比如 Skype )

    这使得很难找到 视频电话 标识符,因为我需要遍历其中的所有内容 Uninstall 文件夹并检查 DisplayName 值对应于 视频电话 (或任何其他应用程序名称)。

    我需要使用批处理语法…这是我目前为止所拥有的,但它在不同的计算机上的行为并不相同,也许我得到了基于某些错误格式的注册表输出的不同变量分配?我不知道。我能用数据结构来包含 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 S.A." (
                for /f "tokens=2,* delims= " %%d in ('reg query %%a /v UninstallString') do (
                    echo %%e
                )
            )
        )
    
    )
    

    是否有一种更清洁、更安全的方法来批量实现这一点?

    2 回复  |  直到 8 年前
        1
  •  3
  •   Oleg    15 年前

    看起来我更容易用

    reg QUERY HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall  /f "Skype Technologies S.A." /s
    

    作为批处理文件的基础。它生成一个简单的输出,如

    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{D103C4BA-F905-437A-8049-DB24763BBE36}
        Publisher    REG_SZ    Skype Technologies S.A.
    
    End of search: 1 match(es) found.
    
        2
  •  0
  •   Marcus Zheng    8 年前

    下面是一个可以提取卸载字符串的批处理脚本,例如 msiexec.exe/x[guid] 来自x86/32位注册表项以及软件名称。输出如下。您可以添加逻辑,例如if语句来过滤和卸载软件(如果您愿意)。

    注意:并非所有应用程序都有 EXEX/X 绳子和一些 文件名 字符串包含 EXEX/I 这意味着重新安装。它们将被替换为 EXEX/X 剧本中

    去除 ^| findstr“msiexec.exe” 如果要列出所有32位应用程序,请从下面的脚本

    MsiExec.exe /X{87D50333-E534-493A-8E98-0A49BC28F64B}    SQL Server 2012 Database Engine Services
    MsiExec.exe /X{C22613C2-C7A4-4761-A906-116ECD4E7477}    SQL Server 2012 Database Engine Services
    MsiExec.exe /X{8BC3EEC9-090F-4C53-A8DA-1BEC913040F9}    Microsoft .NET Framework 4.6.1 Targeting Pack
    MsiExec.exe /X{8C5FB518-E78C-F8F0-BFEC-8EAC65F51003}    Windows Assessment Services - Client (Client SKU)
    MsiExec.exe /X{90160000-008C-0000-0000-0000000FF1CE}    Office 16 Click-to-Run Extensibility Component
    MsiExec.exe /X{90160000-008C-0409-0000-0000000FF1CE}    Office 16 Click-to-Run Localization Component
    MsiExec.exe /X{91361B2A-F741-E591-303B-4EF957F3BAF1}    Windows Assessment Toolkit (AMD64 Architecture Specific)
    
    
    @echo off
    setlocal ENABLEDELAYEDEXPANSION
    
    set x86GUID=HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall
    for /f "tokens=2*" %%A in (
      'reg query "%x86GUID%" /V /F DisplayName /S /E 2^>nul ^| findstr "DisplayName"'
    ) do (
      for /f "delims=" %%P in ('reg query "%x86GUID%" /s /f "%%B" 2^>nul ^| findstr "HKEY_LOCAL_MACHINE"') do (
        for /f "tokens=2*" %%X in (
          'reg query "%%P" /v "UninstallString" 2^>nul ^|findstr "UninstallString" ^|findstr "MsiExec.exe"'
        ) do (
          set MsiStr=%%Y
          set MsiStr=!MsiStr:/I=/X!
          echo !MsiStr! %%B
        )
      )
    )