70065
25.09.2008, aktualisiert am 26.09.2008
9199
11
0
Registry durchsuchen, Pfad kopieren, in Variable setzen
Hallo!
Folgendes:
Ich möchte erstens mittels .bat die Registry durchsuchen.
Im Pfad "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network" soll nach Zeichenfolge "Lan-Verbindung" gesucht werden.
Entwerder soll gleich in dem gefunden Verzeiches ein neuer D-WORD Wert erstellt werden...
oder
der Pfad in dem "Lan-Verbindung" gefunden wurde soll gelesen werden und die ID davor soll als Variable definiert werden.
In meinem Fall:
"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\{E73A4B95-9D35-47FE-B351-C1C6DA675F37}\Connection"
Als Variable definieren: "{4D36E972-E325-11CE-BFC1-08002BE10318}\{E73A4B95-9D35-47FE-B351-C1C6DA675F37}"
Ich hoffe jemand kann mir helfen...
Danke!!!
Gruß!
Folgendes:
Ich möchte erstens mittels .bat die Registry durchsuchen.
Im Pfad "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network" soll nach Zeichenfolge "Lan-Verbindung" gesucht werden.
Entwerder soll gleich in dem gefunden Verzeiches ein neuer D-WORD Wert erstellt werden...
oder
der Pfad in dem "Lan-Verbindung" gefunden wurde soll gelesen werden und die ID davor soll als Variable definiert werden.
In meinem Fall:
"HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\{4D36E972-E325-11CE-BFC1-08002BE10318}\{E73A4B95-9D35-47FE-B351-C1C6DA675F37}\Connection"
Als Variable definieren: "{4D36E972-E325-11CE-BFC1-08002BE10318}\{E73A4B95-9D35-47FE-B351-C1C6DA675F37}"
Ich hoffe jemand kann mir helfen...
Danke!!!
Gruß!
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 97861
Url: https://administrator.de/contentid/97861
Ausgedruckt am: 22.11.2024 um 04:11 Uhr
11 Kommentare
Neuester Kommentar
Hallo Shark16761!
Versuch's mal so:
Grüße
bastla
[Edit] Suchbegriff im zweiten "findstr" auf "}\\{" geändert [/Edit]
Versuch's mal so:
@echo off & setlocal
set ID=
set "Key=HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\"
for /f %%i in ('reg query "%Key%" /s^|findstr "{" 2^>nul') do set "Key2=%%i"
for /f "tokens=6-7 delims=\" %%i in ('reg query "%Key2%" /s^|findstr "}\\{" 2^>nul') do set "ID=%%i\%%j"
if defined ID (
echo %ID%
) else (
echo Nicht gefunden ...
)
bastla
[Edit] Suchbegriff im zweiten "findstr" auf "}\\{" geändert [/Edit]
wieder zu langsam...
Meine zwei Test-Zeilen vom CMD-Prompt sahen so aus:
... wobei sich mein Algorithmus dahingehend unterscheidet, dass ich..
Grüße
Biber
Meine zwei Test-Zeilen vom CMD-Prompt sahen so aus:
>set "regkey=HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network"
>for /f %i in ('reg query "%regkey%" /s ^|find "}\Connection"') do @for /f "delims={} tokens=2,4" %j in ('reg query "%i" /v name ^|findstr "HKEY"') do @echo {%j}\{%k}
... wobei sich mein Algorithmus dahingehend unterscheidet, dass ich..
- nur den einen einzigen Subkey mit dem String-Ende "}\Connection" auslese
- den Wert "Lan-Verbindung" im RegKey ".....\Name" unterstelle.
Grüße
Biber
@bastla und biber
eure beiden Ansätze sind schon gut, jedoch produzieren sie nur eine Liste aller Netzwerkadapter.
Bei mir z.B. lautet die ausgabe von
bei mehreren Adaptern z.B. so
Soweit ich den Fragesteller verstanden habe, sucht er aber genau den Adapter, dessen Name LAN-Verbindung
heisst und nicht etwa LAN-Verbindung 2
Daher habe ich mal biber's cmd-Version erweitert als adaptersearch.cmd
und diese liefert mir nur genau den einzigen Adapter-Wert, den der Fragesteller sucht
Grüße AndreasA
eure beiden Ansätze sind schon gut, jedoch produzieren sie nur eine Liste aller Netzwerkadapter.
Bei mir z.B. lautet die ausgabe von
@echo off & setlocal
set "regkey=HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network"
if exist %temp%\adapterlist.txt del %temp%\adapterlist.txt
for /f %%i in ('reg query "%regkey%" /s ^|find "}\Connection"') do @for /f "delims={} tokens=2,4" %%j in ('reg query "%%i" /v name ^|findstr "HKEY"') do (@echo {%%j}\{%%k})
{4D36E972-E325-11CE-BFC1-08002BE10318}\{03ECF24E-CFA6-470E-8778-154F50C00938}
{4D36E972-E325-11CE-BFC1-08002BE10318}\{1D08E21B-BC59-4E5C-AE4C-E57179B178D8}
{4D36E972-E325-11CE-BFC1-08002BE10318}\{3EBCDD6B-5657-453A-AC4B-B09B8BA231C1}
{4D36E972-E325-11CE-BFC1-08002BE10318}\{B46C56F5-4505-4D6A-BA77-4D04AA94A840}
{4D36E972-E325-11CE-BFC1-08002BE10318}\{BF173863-CDC8-4E35-BFF0-FB35F9EF28F0}
Soweit ich den Fragesteller verstanden habe, sucht er aber genau den Adapter, dessen Name LAN-Verbindung
heisst und nicht etwa LAN-Verbindung 2
Daher habe ich mal biber's cmd-Version erweitert als adaptersearch.cmd
@echo off & setlocal
set "regkey=HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network"
if exist %temp%\adapterlist.txt del %temp%\adapterlist.txt
for /f %%i in ('reg query "%regkey%" /s ^|find "}\Connection"') do @for /f "delims={} tokens=2,4" %%j in ('reg query "%%i" /v name ^|findstr "HKEY"') do (@echo {%%j}\{%%k} >>%temp%\adapterlist.txt)
for /f %%a in (%temp%\adapterlist.txt) do (reg query "%regkey%\%%a\Connection" /s >%temp%\tmp.txt
for /f "tokens=3,4" %%b in ('find "LAN-Verbindung" %temp%\tmp.txt') do (IF "LAN-Verbindung"=="%%b" (If ""=="%%c" echo %%a))
del %temp%\tmp.txt )
del %temp%\adapterlist.txt
und diese liefert mir nur genau den einzigen Adapter-Wert, den der Fragesteller sucht
Grüße AndreasA
@AndreasA
Du hast leider recht ...
... allerdings sollte es eigentlich auch ohne "Temp"-Dateien gehen:
Grüße
bastla
Du hast leider recht ...
... allerdings sollte es eigentlich auch ohne "Temp"-Dateien gehen:
@echo off & setlocal
set "regkey=HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network"
set ID=
for /f %%i in ('reg query "%regkey%" /s ^|find "}\Connection"') do (
for /f "tokens=2*" %%a in ('reg query "%%i" /v name ^|findstr /i "name"') do (
if "%%b"=="LAN-Verbindung" for /f "tokens=2,4 delims={}" %%m in ("%%i") do set "ID={%%m}\{%%n}"
)
)
if defined ID (
echo %ID%
) else (
echo Nicht gefunden ...
)
bastla
Wieso leider? Wir Admins sind auch nur Menschen und können mal was übersehen. Genau deshalb gibts ja dieses Forum
Dafür liebe ich genau euch "Skript-Gurus" Aus ein paar Zeilen Code macht ihr noch weniger Zeilen. "tokens=2*" war genau der Ansatz der mir fehlte und daher nur der Umweg über Temp-Dateien.
Dangöö AndreasA
... allerdings sollte es eigentlich auch ohne
"Temp"-Dateien gehen:
"Temp"-Dateien gehen:
for /f "tokens=2*" %%a in ('reg query "%%i" /v name ^|findstr /i "name"') do (
Dafür liebe ich genau euch "Skript-Gurus" Aus ein paar Zeilen Code macht ihr noch weniger Zeilen. "tokens=2*" war genau der Ansatz der mir fehlte und daher nur der Umweg über Temp-Dateien.
Dangöö AndreasA
Moin Shark16761, bastla und AndreasA,
@AndreasA
Geht (natürlich), aber dann ist es ganz aus mit der Les- und Wartbarkeit.
Außerdem ist bei Onelinern naturgemäß die Möglichkeit der Quellcode-Kommentierung etwas eingeschränkt. - und das wollen wir hier eigentlich nicht als erstrebenswert hochhalten.
Soll heißen:
@70065
Was Du aus diesem Thread mitnehmen solltest ist, dass eigentlich die von Dir formulierte Aufgabe (ermittle aus der Registry denjenigen Reg-Schlüsselnamen, der einen Wert mit dem Text "LAN" enthält) nicht mit vertretbarem Aufwand zuverlässig und eindeutig per Batch lösbar ist.
Alle drei Lösungsansätze beruhen auf selbst getesteten/ermittelten Zusatzinformationen ( die
Stirngwerte "}\Connection", "Name",....), die gar nicht Teil der Problembeschreibung waren.
Unterm Strich heißt es: Wenn Du so ein Problem hast, MUSST Du zumindest wissen:
Anderfalls ist es nicht lösbar.
Grüße
Biber
@AndreasA
Aus ein paar Zeilen Code macht ihr noch weniger Zeilen.
Jepp, ich habe mich gestern abend auch noch dazu verleiten lassen, aus bastlas letzter Vorlage zu einem Einzeiler zusammenzudampfen....Geht (natürlich), aber dann ist es ganz aus mit der Les- und Wartbarkeit.
Außerdem ist bei Onelinern naturgemäß die Möglichkeit der Quellcode-Kommentierung etwas eingeschränkt. - und das wollen wir hier eigentlich nicht als erstrebenswert hochhalten.
Soll heißen:
- nimm bastla oder mich nicht immer ganz furchtbar ernst, wenn so ein eingedampfter (funktionierender) Codeschnipsel rausfällt, der aussieht als wären wir mit dem Kopf auf der Tastatur aufgeschlagen.
- bei den heutigen Festplatten liegt die minimale Byte-Größe, die eine Datei belegen kann, bei 16384 ... egal ob da 100 Zeichen oder 2500 oder 10000 Zeichen drinstehen
- manchmal hat ein (wegoptimierbarer) Zwischenschritt doch den Vorteil, dass die Pflegbarkeit und Nachvollzierbarkeit erheblich steigt.
@70065
Was Du aus diesem Thread mitnehmen solltest ist, dass eigentlich die von Dir formulierte Aufgabe (ermittle aus der Registry denjenigen Reg-Schlüsselnamen, der einen Wert mit dem Text "LAN" enthält) nicht mit vertretbarem Aufwand zuverlässig und eindeutig per Batch lösbar ist.
Alle drei Lösungsansätze beruhen auf selbst getesteten/ermittelten Zusatzinformationen ( die
Stirngwerte "}\Connection", "Name",....), die gar nicht Teil der Problembeschreibung waren.
Unterm Strich heißt es: Wenn Du so ein Problem hast, MUSST Du zumindest wissen:
- wie heißt der "Vaterknoten", unterhalb dessen gesucht werden soll (den hast du gepostet)
- wie heißt der letzte Unterknoten (der Wert "....\Connection" )
- Wie der Schlüsselname, dessen Wert z.B. "LAN" sein soll (oben also: "Name")
Anderfalls ist es nicht lösbar.
Grüße
Biber
@Biber
Und genau solch punktgenaue Zusammenfassung von Dir sind der Grund, warum ich sehr oft hier bin --> Man kann hier wirklich was lernen
Zitat von @Biber:
@AndreasA
Jepp, ich habe mich gestern abend auch noch dazu verleiten lassen,
aus bastlas letzter Vorlage zu einem Einzeiler zusammenzudampfen....
Geht (natürlich), aber dann ist es ganz aus mit der Les- und
Wartbarkeit.
Stimmt schon.@AndreasA
Jepp, ich habe mich gestern abend auch noch dazu verleiten lassen,
aus bastlas letzter Vorlage zu einem Einzeiler zusammenzudampfen....
Geht (natürlich), aber dann ist es ganz aus mit der Les- und
Wartbarkeit.
Außerdem ist bei Onelinern naturgemäß die Möglichkeit der Quellcode-Kommentierung
etwas eingeschränkt. - und das wollen wir hier eigentlich nicht als
erstrebenswert hochhalten.
Nun das hängt immer vom Bedarfsfall ab. Nicht jede Hilfs-Zusatzroutine muss ja mit Kommentar-Romanen gefüllt werden, wenn man deren Aufgabe schon kennt .etwas eingeschränkt. - und das wollen wir hier eigentlich nicht als
erstrebenswert hochhalten.
Soll heißen:
is ja n Brüller, aber deine Art Humor hat mir schon immer gefallen. Tut gut so kurz vorm Wochenende. Und wenn ich euch nicht ernst nehmen würde, hätte ich etwa die Hälfte meiner Skripte nicht auf die Beine stellen können - nimm bastla oder mich nicht immer ganz furchtbar ernst, wenn so ein eingedampfter > (funktionierender) Codeschnipsel rausfällt, der aussieht als wären wir mit dem Kopf auf der Tastatur aufgeschlagen.
* bei den heutigen Festplatten liegt die minimale Byte-Größe, die eine Datei belegen
kann, bei 16384 ... egal ob da 100 Zeichen oder 2500 oder 10000 Zeichen drinstehen
Is durchaus ein nachdenkenswertes Argument.kann, bei 16384 ... egal ob da 100 Zeichen oder 2500 oder 10000 Zeichen drinstehen
* manchmal hat ein (wegoptimierbarer) Zwischenschritt doch den Vorteil, dass die
Pflegbarkeit und Nachvollzierbarkeit erheblich steigt.
Daran habe ich mich bisher immer gehalten. Kann ja sein meine Skripte müssen ein paar Jahre später mal geändert werden. Ob ich da noch weiß warum ich was wie ge"-batcht" habe, wage ich jetzt schon mal zu bezweifeln. Pflegbarkeit und Nachvollzierbarkeit erheblich steigt.
@70065
Was Du aus diesem Thread mitnehmen solltest ist, dass eigentlich die von Dir
formulierte Aufgabe (ermittle aus der Registry denjenigen Reg-Schlüsselnamen, der
einen Wert mit dem Text "LAN" enthält) nicht mit vertretbarem Aufwand
zuverlässig und eindeutig per Batch lösbar ist.
Alle drei Lösungsansätze beruhen auf selbst getesteten/ermittelten
Zusatzinformationen ( die Stirngwerte "}\Connection", "Name",....), die gar
nicht Teil der Problembeschreibung waren.
Unterm Strich heißt es: Wenn Du so ein Problem hast, MUSST Du zumindest wissen:
Anderfalls ist es nicht lösbar.
Was Du aus diesem Thread mitnehmen solltest ist, dass eigentlich die von Dir
formulierte Aufgabe (ermittle aus der Registry denjenigen Reg-Schlüsselnamen, der
einen Wert mit dem Text "LAN" enthält) nicht mit vertretbarem Aufwand
zuverlässig und eindeutig per Batch lösbar ist.
Alle drei Lösungsansätze beruhen auf selbst getesteten/ermittelten
Zusatzinformationen ( die Stirngwerte "}\Connection", "Name",....), die gar
nicht Teil der Problembeschreibung waren.
Unterm Strich heißt es: Wenn Du so ein Problem hast, MUSST Du zumindest wissen:
- wie heißt der "Vaterknoten", unterhalb dessen gesucht werden soll (den hast du gepostet)
- wie heißt der letzte Unterknoten (der Wert "....\Connection" )
- Wie der Schlüsselname, dessen Wert z.B. "LAN" sein soll (oben also: "Name")
Anderfalls ist es nicht lösbar.
Und genau solch punktgenaue Zusammenfassung von Dir sind der Grund, warum ich sehr oft hier bin --> Man kann hier wirklich was lernen
Grüße Biber
Dankbare Grüße zurückZitat von @70065:
Danke an alle es hat funktioniert!!!
Na Prima.Danke an alle es hat funktioniert!!!
Ja ich habe nur nach dem Adapter "Lan-Verbindung" gesucht.
Bitte beim nächsten mal auch genauer die Problemstellung formulieren Wobei sich für mich die Frage stellt warum du für das Modifizieren von Netzverbindungen nicht auf die betriebssystemeigene Netshell ( siehe Hilfe netsh ) zurückgreifst. Dort kannst du direkt mit dem Namen arbeiten
PS Du kannst dein Beitrag als gelöst markieren.
Gruß AndreasA