2017-10-19 2 views
0

インストールされている各プログラムのDisplayNameとDisplayVersionの両方を出力します。キーごとに複数のレジストリ値を出力

for /f "tokens=2*" %a in (
    'reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" /s^
    | findstr /c:"DisplayName" /c:"DisplayVersion"' 
) do @echo %b 

1行に1つずつ出力しますが、1行に表示したいのですが、どうしますか?

> DisplayName, DisplayVersion 

答えて

1

おそらく、32ビットと64ビットの両方のレジストリをチェックする必要があります。どちらを指定しないと、REG QUERYはデフォルトで64ビットしか検索しません。

すべてのプログラムキーにDisplayNameおよび/またはDisplayVersionがあるわけではありません。

次のコードは、DisplayNameが存在しない場合は完全キーを示し、DisplayVersionが存在しない場合は空のバージョンを示します。 32ビットと64ビットの両方のレジストリが検索されます。

@echo off 
setlocal enableDelayedExpansion 
set "key=" 
set "name=" 
set "ver=" 
for %%s in (32 64) do (
    for /f "delims=" %%A in ('reg query "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall" /s /reg:%%s 2^>nul') do (
    set "ln=%%A" 
    if "!ln:~0,4!" equ "HKEY" (
     if defined name (echo "!name!","!ver!") else if defined key echo "!key!","!ver!" 
     set "name=" 
     set "ver=" 
     set "key=%%A" 
    ) else for /f "tokens=1,2*" %%A in ("!ln!") do (
     if "%%A" equ "DisplayName" set "name=%%C" 
     if "%%A" equ "DisplayVersion" set "ver=%%C" 
    ) 
) 
) 
if defined name (echo "!name!","!ver!") else if defined key echo "!key!","!ver!" 
0

最も簡単な方法は、Windows PowerShell内で情報を直接出力だけになるだろうが、それはあなたがこの質問に適用したタグに直接反するだろう。ここで

ため、PowerShellを使用してバッチファイルです:あなたは64ビットオペレーティングシステム上でこれを使用していない場合は、line 2から\Wow6432Nodeを削除することがあり

@Echo Off 
Set "KP=Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall" 

PowerShell -C "GP HKLM:\%KP%\*|Select DisplayName,DisplayVersion|FT -A -H" 
Pause 


DisplayName出力は、それらの文字の長さとCMD.EXEのBUFFERSIZEに切り捨てられることが可能です。これは、以下、(おそらくは粗)、コード使用の周りに加工することができます。あなたには、いくつかを持っている場合、必要に応じてあなたがline 3上の高さ/幅を調整することができ、上記のコードで

@Echo Off 
Set "KP=Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall" 
Set/A W=90,H=120 

PowerShell -C "&{$H=Get-Host;$R=$H.UI.RawUI;$B=$R.BufferSize;"^ 
"$W=$R.WindowSize;$B.Width=If (%W% -GT $W.Width) {%W%} Else {$W.Width};"^ 
"$B.Height=If (%H% -GT $W.Height) {%H%} Else {$W.height};$R.BufferSize=$B};"^ 
"GP HKLM:\%KP%\*|Select DisplayName,DisplayVersion|FT -A -H" 
Pause 

を、これが必要であるかもしれません非常に長いDisplayNameのか、そのキーの下にインストールされたソフトウェアの巨大なリスト

関連する問題