Batch – Registry-Werte mit und ohne Leerzeichen auslesen

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:
registry-werte-mit-batch-auslesen-mit-leerzeichen-usebackq

2 Kommentare

  1. 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?

  2. Du kannst dir mit dem Befehl

    reg query /?

    die Details und Möglichkeiten von reg ansehen. Diese Internetseite beleuchtet die Suche in der Registry etwas genauer.

    Jedenfalls kannst du mit

    reg query [Schlüssel] [/d|/k|/v] /f [Suchstring] /s

    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:

    reg query HKEY_LOCAL_MACHINESOFTWAREWOW6432NodeMicrosoftWindowsCurrentVersionUninstall /v /f "UninstallString" /s

    Der Befehl hat bei mir 41 Schlüssel gefunden. Allerdings musst du diese Ausgabe mit

    for 

    weiter bearbeiten, wenn du mit den Ergebnissen etwas machen willst. Den Code musst du dir zusammengoogeln.

Schreibe einen Kommentar