「For /f delims」コマンド ラインを使用して Office 2019 レジストリの表示名を取得する方法

「For /f delims」コマンド ラインを使用して Office 2019 レジストリの表示名を取得する方法

Office 2019 の DisplayName「Microsoft Office Professional Plus 2019 - en-us」を取得してエコーします。

powercell コマンドを使用して cmd コマンドを見つけました。

Powershell /command "Get-ItemProperty HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\ProPlus2019Volume* | Select-Object DisplayName"

DisplayName
-----------
Microsoft Office Professional Plus 2019 - en-us

コマンド ライン「for」detect を使用して取得するにはどうすればよいですか? (PowerShell の代わりに「reg query」を使用することもできます。)

答え1

実際の意図が、それらの名前のパターンのセットを使用してインストールされたアプリ名のリストを取得することであると仮定すると、これはそれを実行します。また、アプリが MSI ファイルやパッケージ管理などの通常の方法でインストールされていることも想定しています。[ニヤリ]

コード ...

$PackageProviderList = @(
    'msi'
    'programs'
    )
$TargetAppList = @(
    'libreoffice*'
    'microsoft visual c*'
    )

$FoundAppList = (Get-Package -ProviderName $PackageProviderList -Name $TargetAppList).Name |
    Sort-Object

$FoundAppList

現時点での私のシステムの出力は...

LibreOffice 7.2 Help Pack (English (United States))
LibreOffice 7.2.2.2
Microsoft Visual C++ 2015-2022 Redistributable (x64) - 14.30.30704
Microsoft Visual C++ 2015-2022 Redistributable (x86) - 14.30.30704
Microsoft Visual C++ 2022 X64 Additional Runtime - 14.30.30704
Microsoft Visual C++ 2022 X64 Minimum Runtime - 14.30.30704
Microsoft Visual C++ 2022 X86 Additional Runtime - 14.30.30704
Microsoft Visual C++ 2022 X86 Minimum Runtime - 14.30.30704

コードが何をするのか...

  • 必要なプロバイダー タイプのリストを作成します。、、または
    からのものは不要でした。msunugetpowershellget
  • 検索対象としてインストールされているもののリストを作成します。
    ターゲット名を事前に知る必要がないようにワイルドカードを使用します。
  • Get-Package一致するインストールのリストを取得するために実行されます
  • .Name結果のプロパティから値を取得します
  • リストを並べ替える
  • それを$Varに格納する
  • そのリストを画面に表示する

答え2

set Office2019ProductReg="HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\ProPlus2019Volume - en-us"

for /f "usebackq tokens=1-2*" %%a in (`"reg query %Office2019ProductReg% /v DisplayName|find /i "DisplayName""`) do (
set office_ProductName=%%c

関連情報