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 

두 줄을 한 줄에 하나씩 출력하지만 한 줄에 표시하고 싶습니다. 어떻게합니까?

> 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을 내 정보를 바로 바로 출력하는 것입니다하지만 당신이이 질문에 적용한 태그에 직접적으로 위배되는 것이다.

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

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

당신이 64 비트 운영 체제에서이를 사용하지 않는 경우가 line 2에서 \Wow6432Node을 제거 할 수 있습니다 :

여기에 따라서 PowerShell을 사용하는 배치 파일입니다.


DisplayName 출력이 잘릴 수하는 것이 가능하다 그들의 문자 길이와 cmd.exe를의 버퍼 크기에. 이것은 다음, (아마도 원유) , 코드를 사용하여 해결할 수 있습니다 : 당신은 어떤이있는 경우 필요에 따라이 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 또는 해당 키 아래에 설치된 소프트웨어의 거대한 목록.

관련 문제