Reg query, Schlüsselname eines zu suchenden Wertes herausfinden
Hallo zusammen,
ich bräuchte einen kleinen Denkanstoß bzw. Hilfe.
Es geht um ein Batch-Skript:
Ich suche in der registry nach einem bestimmten Wert und möchte den Schlüsselname als Rückgabe
erhalten der diesen Wert beinhaltet.
Leider bekomme ich das mit einem reg query in einer FOR /F Schleife nicht ganz hin.
Ich habe es hiermit versucht, aber so bekomme ich nur den gesuchten Wert (%wert%) angezeigt
nicht aber den Schlüsselnamen in dem dieser vorkommt.
Ich hoffe mein Problem verständlich beschrieben zu haben.
Vielen Dank für Eure Hilfe
mfg
quba
ich bräuchte einen kleinen Denkanstoß bzw. Hilfe.
Es geht um ein Batch-Skript:
Ich suche in der registry nach einem bestimmten Wert und möchte den Schlüsselname als Rückgabe
erhalten der diesen Wert beinhaltet.
Leider bekomme ich das mit einem reg query in einer FOR /F Schleife nicht ganz hin.
Ich habe es hiermit versucht, aber so bekomme ich nur den gesuchten Wert (%wert%) angezeigt
nicht aber den Schlüsselnamen in dem dieser vorkommt.
@echo OFF
setlocal ENABLEEXTENSIONS
set KEY_NAME=HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook\9375CFF0413111d3B88A00104B2A6676
set VALUE_NAME=Account Name
set wert=4D006900630072006F0073006F00660074002000450078006300680061006E00670065000000
For /F "tokens=4 delims= " %%i in ('REG QUERY "%KEY_NAME%" /s /v "%VALUE_NAME%" ^| findstr /i "%wert%"') Do (
echo %%i
)
Ich hoffe mein Problem verständlich beschrieben zu haben.
Vielen Dank für Eure Hilfe
mfg
quba
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 201458
Url: https://administrator.de/forum/reg-query-schluesselname-eines-zu-suchenden-wertes-herausfinden-201458.html
Ausgedruckt am: 23.12.2024 um 05:12 Uhr
12 Kommentare
Neuester Kommentar
Hi.
Schau Dir mal Bastlas Lösung hier an: Registry-OP per Skript - Zweig mit bestimmtem Inhalt löschen - sollte bei Dir abgewandelt anwendbar sein.
Schau Dir mal Bastlas Lösung hier an: Registry-OP per Skript - Zweig mit bestimmtem Inhalt löschen - sollte bei Dir abgewandelt anwendbar sein.
Hallo quba!
Wie DWW schon sagte, sollte eigentlich der Ansatz aus dem verlinkten Thread auch hier passen - etwa so:
Grüße
bastla
Wie DWW schon sagte, sollte eigentlich der Ansatz aus dem verlinkten Thread auch hier passen - etwa so:
@echo OFF & setlocal
set "KEY_NAME=HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook\9375CFF0413111d3B88A00104B2A6676"
set "VALUE_NAME=Account Name"
set "wert=4D006900630072006F0073006F00660074002000450078006300680061006E00670065000000"
for /f "delims=" %%a in ('reg query "%KEY_NAME%"') do (
if not defined Done for /f "delims=" %%b in ('reg query "%%a" 2^>nul') do (
if not defined Done for /f "delims=" %%c in ('reg query "%%b" 2^>nul') do (
if not defined Done reg query "%%c\" /s 2>nul|findstr /ic:"%VALUE_NAME%">nul && (echo "%%c" & set Done=true)
)
)
)
bastla
Hallo quba!
Wenn es nur eine Unterschlüsselebene gibt (anderenfalls bitte Dein Ergebnis von
posten), sollte sich das noch kürzer (und genauer) formulieren lassen:
Bei meinem Test (mit einem %wert%, der bei mir existiert) war das Ergebnis jedenfalls
Grüße
bastla
Wenn es nur eine Unterschlüsselebene gibt (anderenfalls bitte Dein Ergebnis von
reg query "HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook\9375CFF0413111d3B88A00104B2A6676" /s
@echo OFF & setlocal
set "KEY_NAME=HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook\9375CFF0413111d3B88A00104B2A6676"
set "VALUE_NAME=Account Name"
set "wert=4D006900630072006F0073006F00660074002000450078006300680061006E00670065000000"
for /f "delims=" %%a in ('reg query "%KEY_NAME%"') do (
if not defined Done for /f "delims=" %%c in ('reg query "%%a\" 2^>nul') do (
if not defined Done reg query "%%c\" /s 2>nul|findstr /ic:"%VALUE_NAME%"|findstr /ic:"%wert%">nul && (echo "%%c" & set Done=true)
)
)
"HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messagin
g Subsystem\Profiles\Outlook\9375CFF0413111d3B88A00104B2A6676\00000001"
bastla
Hallo quba!
Grüße
bastla
es kann mehrere Unterschlüssel geben
Klar (sonst müsste ja nicht nach dem richtigen gesucht werden ), aber diese befinden sich alle auf einer Ebene (also direkt unter "HKEY_CURRENT_USER\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook\9375CFF0413111d3B88A00104B2A6676") und nicht tiefer verschachtelt - daher sollte mein zweiter Vorschlag eigentlich passen ...Grüße
bastla
Hallo quba!
... und, wie gesagt, bei meinem Test mit diesem Ansatz klappt's auch mit dem Wunschergebnis - und wie ist das bei Dir, hast Du das überhaupt schon getestet?
Eine andere Variante könnte übrigens so aussehen:
Grüße
bastla
das ist so nicht richtig, der gesuchte Wert "Account Name" befindet sich in diesem Fall im Unterschlüssel
Ich hab ja auch nix anderes behauptet (sondern nur gesagt, dass die Unterschlüssel nicht noch weiter verschachtelt, sondern alle auf einer Ebene sind) ...... und, wie gesagt, bei meinem Test mit diesem Ansatz klappt's auch mit dem Wunschergebnis - und wie ist das bei Dir, hast Du das überhaupt schon getestet?
Eine andere Variante könnte übrigens so aussehen:
@echo off & setlocal enabledelayedexpansion
set "KEY_NAME=HKCU\Software\Microsoft\Windows NT\CurrentVersion\Windows Messaging Subsystem\Profiles\Outlook\9375CFF0413111d3B88A00104B2A6676"
set "VALUE_NAME=Account Name"
set "wert=4D006900630072006F0073006F00660074002000450078006300680061006E00670065000000"
for /f "delims=" %%a in ('reg query "%KEY_NAME%" /s ^|findstr /i "HKEY_CURRENT_USER %wert%"') do (
if not defined TheKey (
echo "%%a"|findstr /i "HKEY_CURRENT_USER">nul && set "Key=%%a"
echo "%%a"|findstr /ic:"%VALUE_NAME%"|findstr /ic:"%wert%">nul && set "TheKey=!Key!"
)
)
if not defined TheKey echo Nicht gefunden! & pause & goto :eof
echo "%TheKey%"
bastla