Registry Werte aus der Registry auslesen ist ein alter Hut, no problem. Auch ganze Pfade aus der Registry lesen stellt grundsätzlich kein Problem dar. Schwierig wird es jedoch, wenn der auszulesende Pfad Leerzeichen enthält. Und seit Windows Vista enthalten ja fast alle Pfade ein Leerzeichen: C:\Program Files\…
Dieser Post dient der Zusammenfassung der wichtigsten Batch Registry Abfragen.
Einfache Werte und Pfade ohne Leerzeichen
@echo on & Color 9f & setlocal REM einfache Werte set ff=0 for /f "tokens=1,2,3 delims= " %%a in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Mozilla\Mozilla Firefox" /v "CurrentVersion"^|findstr "CurrentVersion"') do set ff=%%c echo %ff% REM einfache Pfade set spath=0 for /f "tokens=1,2,3 delims= " %%a in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Ghisler\Total Commander" /v "IniFileName"^|findstr "IniFileName"') do set spath=%%c echo %spath%
Also eine festgelegte Anzahl an Tokens, Leerzeichen als Delimiter, der dritte Token ist der Registry Wert. Token 1 und 2 sind der Name des Registry Werts und der Wert-Typ.
Werte oder Pfade mit Leerzeichen
REM Werte mit Leerzeichen set value=0 for /f "usebackq skip=2 tokens=1,2*" %%a in (reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\FileZilla Client" /v "Startmenu"
) do set value=%%c echo %value% REM Pfade mit mehreren Leerzeichen set path1=0 set path2=0 REM Möglichkeit 1: mit Option usebackq, /ve (liest den (Standard) Wert aus) for /f "usebackq skip=2 tokens=1,2*" %%a in (reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\FileZilla Client" /ve
) do set path1=%%c echo %path1% REM Möglichkeit 2: ohne Option usebackq for /f "tokens=2*" %%a in ('reg query "HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\FileZilla Client" /ve') do set path2=%%b echo %path2%
Für Werte oder Pfade mit Leerzeichen müssen 3 Dinge beachtet werden:
1. Die Delimiter entfallen.
2. Tokens empfangen mit * mehrere durch Leerzeichen getrennte Werte und packen sie in den letzten Token zusammen; den wir dann abfragen.
3. Bei der Methode 1 mit usebackq müsst ihr unbedingt auf die Anführungszeichen achten! Der komplette Inhalt in den Klammern wird mit einem „backquote“, also , eingeschlossen. Das
ist kein “ und kein ‚ und kein ´ usw, achtet darauf! Alle anderen Angaben kommen wie gewohnt in doppelte Anführungszeichen. Bei der Methode ohne usebackq kommt der Klammerinhalt in normale einfache Anführungszeichen ‚.
Das Ergebnis aller obrigen Code-Schnipsel:
Hallo, erstmal danke für diesen Beitrag. Ich bin noch Anfänger und habe noch so meine kleinen Schwierigkeiten. Deshalb hab ich da eine Frage, ich möchte eine Batch schreiben, welche nach dem „UninstallString“ im Pfad HKLM\SOFTWARE\WOw6432Node\Microsoft\CurrentVersion\Uninstall\
sucht. Der Schlüssel ist leider nicht immer der selbe (ändert sich bei jeder Installation der Software). Deshalb sollen an oben genanntem Pfad alle Schlüssel danach durchsucht werden. Wie kann ich das umsetzen?
Du kannst dir mit dem Befehl
die Details und Möglichkeiten von reg ansehen. Diese Internetseite beleuchtet die Suche in der Registry etwas genauer.
Jedenfalls kannst du mit
ganz gut suchen.
Folgender Befehl listet dir nun also alle (Unter-)Schlüssel, die eine Form von „UninstallString“ enthalten, auf und liefert noch die entsprechenden Fundvalues dazu:
Der Befehl hat bei mir 41 Schlüssel gefunden. Allerdings musst du diese Ausgabe mit
weiter bearbeiten, wenn du mit den Ergebnissen etwas machen willst. Den Code musst du dir zusammengoogeln.