masterdns
Goto Top

bat reg auslesen software

ich habe folgendes problem

ich möchte mit einer bat datei die installierte software aus der reg auslesen
das problem dabei ist das in der reg keys sind die leezeichen enthalten
den pfad hklm\software..... hatte ich auch mal in "" gesetzt aber bringt ja nichts da die keys die leerzeichen enthalten

jemand eine lösung?

set log=\\logs\%computername%.txt
set logg=\\logg\%computername%.txt

echo. >%log%
For /f %%a in ('reg query hklm\software\microsoft\windows\currentversion\uninstall') do (call :process_query %%a)

find /i "DisplayName" < %log% | sort > %logg%
goto :eof

:process_query
set KEY=%1
reg query %key% /v DisplayName >>%log%
goto :eof

Content-Key: 102486

Url: https://administrator.de/contentid/102486

Printed on: April 19, 2024 at 15:04 o'clock

Member: Biber
Biber Nov 24, 2008 at 08:57:01 (UTC)
Goto Top
Moin masterdns,

wattn Nick und wattn Beitragstitel. Respekt.

Du musst, wenn eine Rückgabe mit Leerzeichen oder, auf bätchisch, mit mehreren Token zurückkommen kann, der FOR/F-Anweisung noch ein "delims=" (=Anweisung keine Delimiter=nimm komplette Ausgabe) mitgeben.

Mit zusätzlichem "delims=" erhältst Du am CMD-Prompt (proof-of-concept):
[diese drei Zeilen einzeln/nacheinander Copy & Pasten; erste zeile ist optional]
mode con cols=166 lines=55
set "RegKey=hklm\software\microsoft\windows\currentversion\uninstall"  
(for /f "delims=" %i in ('reg query %regkey%') do @Reg query "%i" /v DisplayName 2>nul|find /i "Displayname")|sort  

Ausgabe z.B.
<code type ="plain">.....
DisplayName REG_SZ Windows Workflow Foundation
DisplayName REG_SZ Windows XP-Hotfix - KB873339
DisplayName REG_SZ Windows XP-Hotfix - KB885250
DisplayName REG_SZ Windows XP-Hotfix - KB885835
DisplayName REG_SZ Windows XP-Hotfix - KB885836
DisplayName REG_SZ Windows XP-Hotfix - KB888113
DisplayName REG_SZ Windows XP-Hotfix - KB888302
DisplayName REG_SZ Windows XP-Hotfix - KB890859


Grüße
Biber
Member: masterdns
masterdns Nov 24, 2008 at 09:43:48 (UTC)
Goto Top
also bringt auch keinen unterschied
die ausgabe ist ja richtig nur kann er die reg nicht richtig auslesen alles wo leerzeichen sind kann er nicht auslesen
z.B. VLC media player
displayname mit leerzeichen kann er auslesen nur die keys nicht
Member: Biber
Biber Nov 24, 2008 at 10:39:24 (UTC)
Goto Top
kann ich nicht bestätigen
dreh doch die bedingung um so dass nur alle reg-subkeys ausgegeben werden die keinen wert für displayname enthalten
for /f "delims=" %i in ('reg query %regkey%') do @Reg query "%i" /v DisplayName >nul|| echo "%i"  
bei mir erscheinen dann sowohl subkeys mit leerzeichen wie auch ohne aber weil kein schlüssel displayname vorhanden ist
bsp
....
Fehler: Der angegebene Registrierungsschlüssel oder Wert konnte nicht gefunden werden.
"HKEY_LOCAL_MACHINE\software\microsoft\windows\currentversion\uninstall\MsJavaVM"

Fehler: Der angegebene Registrierungsschlüssel oder Wert konnte nicht gefunden werden.
"HKEY_LOCAL_MACHINE\software\microsoft\windows\currentversion\uninstall\Nero - Burning Rom!UninstallKey"
....
Member: masterdns
masterdns Nov 24, 2008 at 10:51:38 (UTC)
Goto Top
???
wieso die keinen wert für displayname enthalten?

kannst du mir mal die ganze bat schicken die bei dir funktioniert?

weil ich bekomm die fehlermeldung
Member: Biber
Biber Nov 24, 2008 at 11:29:59 (UTC)
Goto Top
Zitat von @masterdns:
???
!!!
wieso die keinen wert für displayname enthalten?
beispiel
>reg query "HKEY_LOCAL_MACHINE\software\microsoft\windows\currentversion\uninstall\Nero - Burning Rom!UninstallKey" /s  

! REG.EXE VERSION 3.0

HKEY_LOCAL_MACHINE\software\microsoft\windows\currentversion\uninstall\Nero - Burning Rom!UninstallKey
    UninstallString     REG_SZ  C:\Programme\Ahead\nero\uninstall\UNNERO.exe /UNINSTALL
    DisplayIcon REG_SZ  C:\Programme\Ahead\nero\nero.exe
    SRCConcept  REG_DWORD       0x1
    #DisplayName        REG_SZ  Nero OEM
    ShowDisplayName     REG_DWORD       0x0
--> bei diesem subkey mit leerzeichen gibt es keinen key displayname sondern nur einen #displaynamen aber der wird ja nicht gefunden weil ich explizit den genauen schlüsselnamen angebe
kannst du mir mal die ganze bat schicken die bei dir funktioniert?
ich hab doch gar keine weil weil spiel doch noch am cmd prompt
weil ich bekomm die fehlermeldung
evtl hast du es ja as is in den batch übernommen aber dort müssen alle %i zu %%i werden und so weiter
Member: masterdns
masterdns Nov 24, 2008 at 12:35:47 (UTC)
Goto Top
hab das nun so aber kommt daselbe raus
noch immer nicht die mit leerzeichen:


set log=\\logs\%computername%.txt
set logg=\\logg\%computername%.txt
set RegKey="hklm\software\microsoft\windows\currentversion\uninstall"

echo. >%log%
For /f "delims=" %%a in ('reg query %regkey%') do (call :process_query %%a)

find /i "DisplayName" < %log% | sort > %logg%
goto :eof

:process_query
set KEY=%1
reg query %key% /v DisplayName >>%log%
goto :eof
Member: masterdns
masterdns Nov 24, 2008 at 13:20:31 (UTC)
Goto Top
super ich danke dir!!!!!!!!!!!!!!!!!!!!!!!!!!

nun geht alles perfekt