Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Registry durchsuchen, Pfad kopieren, in Variable setzen

Frage Entwicklung Batch & Shell

Mitglied: 70065

70065 (Level 1)

25.09.2008, aktualisiert 26.09.2008, 7603 Aufrufe, 11 Kommentare

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ß!
Mitglied: bastla
25.09.2008 um 17:30 Uhr
Hallo Shark16761!

Versuch's mal so:
01.
@echo off & setlocal 
02.
set ID= 
03.
set "Key=HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network\" 
04.
for /f %%i in ('reg query "%Key%" /s^|findstr "{" 2^>nul') do set "Key2=%%i" 
05.
for /f "tokens=6-7 delims=\" %%i in ('reg query "%Key2%" /s^|findstr "}\\{" 2^>nul') do set "ID=%%i\%%j" 
06.
if defined ID ( 
07.
    echo %ID% 
08.
) else ( 
09.
    echo Nicht gefunden ... 
10.
)
Grüße
bastla

[Edit] Suchbegriff im zweiten "findstr" auf "}\\{" geändert [/Edit]
Bitte warten ..
Mitglied: Biber
25.09.2008 um 17:41 Uhr
....wieder zu langsam...

Meine zwei Test-Zeilen vom CMD-Prompt sahen so aus:
01.
>set "regkey=HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network" 
02.
>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
Bitte warten ..
Mitglied: bastla
25.09.2008 um 17:49 Uhr
... was sicherlich die exaktere Umsetzung ist (ich habe aber auch noch etwas bei meinem zweiten "findstr" nachgebessert ).

Grüße
bastla
Bitte warten ..
Mitglied: AndreasA
25.09.2008 um 18:39 Uhr
@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
01.
@echo off & setlocal 
02.
set "regkey=HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network" 
03.
if exist %temp%\adapterlist.txt del %temp%\adapterlist.txt 
04.
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})
bei mehreren Adaptern z.B. so
01.
{4D36E972-E325-11CE-BFC1-08002BE10318}\{03ECF24E-CFA6-470E-8778-154F50C00938}  
02.
{4D36E972-E325-11CE-BFC1-08002BE10318}\{1D08E21B-BC59-4E5C-AE4C-E57179B178D8}  
03.
{4D36E972-E325-11CE-BFC1-08002BE10318}\{3EBCDD6B-5657-453A-AC4B-B09B8BA231C1}  
04.
{4D36E972-E325-11CE-BFC1-08002BE10318}\{B46C56F5-4505-4D6A-BA77-4D04AA94A840}  
05.
{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
01.
@echo off & setlocal 
02.
set "regkey=HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network" 
03.
if exist %temp%\adapterlist.txt del %temp%\adapterlist.txt 
04.
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) 
05.
for /f %%a in (%temp%\adapterlist.txt) do (reg query "%regkey%\%%a\Connection" /s  >%temp%\tmp.txt 
06.
										   for /f "tokens=3,4" %%b in ('find "LAN-Verbindung" %temp%\tmp.txt') do (IF "LAN-Verbindung"=="%%b" (If ""=="%%c" echo %%a)) 
07.
										   del %temp%\tmp.txt											) 
08.
del %temp%\adapterlist.txt
und diese liefert mir nur genau den einzigen Adapter-Wert, den der Fragesteller sucht

Grüße AndreasA
Bitte warten ..
Mitglied: bastla
25.09.2008 um 20:05 Uhr
@AndreasA
Du hast leider recht ...

... allerdings sollte es eigentlich auch ohne "Temp"-Dateien gehen:
01.
@echo off & setlocal 
02.
set "regkey=HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Network" 
03.
set ID= 
04.
for /f %%i in ('reg query "%regkey%" /s ^|find "}\Connection"') do ( 
05.
    for /f "tokens=2*" %%a in ('reg query "%%i" /v name ^|findstr /i "name"') do ( 
06.
	if "%%b"=="LAN-Verbindung" for /f "tokens=2,4 delims={}" %%m in ("%%i") do set "ID={%%m}\{%%n}"    
07.
08.
09.
 
10.
if defined ID (  
11.
    echo %ID%  
12.
) else (  
13.
    echo Nicht gefunden ...  
14.
)
Grüße
bastla
Bitte warten ..
Mitglied: AndreasA
26.09.2008 um 10:17 Uhr
Zitat von bastla:
@AndreasA
Du hast leider recht ...
Wieso leider? Wir Admins sind auch nur Menschen und können mal was übersehen. Genau deshalb gibts ja dieses Forum

... allerdings sollte es eigentlich auch ohne
"Temp"-Dateien gehen:
01.
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
Bitte warten ..
Mitglied: Biber
26.09.2008 um 11:20 Uhr
Moin Shark16761, bastla und AndreasA,

@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
Bitte warten ..
Mitglied: 70065
26.09.2008 um 11:24 Uhr
Danke an alle es hat funktioniert!!!

Ja ich habe nur nach dem Adapter "Lan-Verbindung" gesucht.

Super!

Gruß
Bitte warten ..
Mitglied: AndreasA
26.09.2008 um 11:50 Uhr
@Biber

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.
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 .
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.
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
* 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.
* 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.

@Shark16761
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ück
Bitte warten ..
Mitglied: AndreasA
26.09.2008 um 12:15 Uhr
Zitat von 70065:
Danke an alle es hat funktioniert!!!

Na Prima.
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
Bitte warten ..
Mitglied: 70065
26.09.2008 um 13:06 Uhr
Weil ich dort nur den D-Wort Wert "ShowIcon" erstellen möchte. Damit das Netzwerksymbol im Infobereich angezeigt wird.

Gruß bis zum nächsten Mal...
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Batch & Shell
Variable setzen können während timeout (3)

Frage von DontFlameMeITryMyBest zum Thema Batch & Shell ...

Batch & Shell
Wert in Registry suchen und in Variable speichern (2)

Frage von J.Troll zum Thema Batch & Shell ...

Batch & Shell
gelöst Windows 7 Registry durchsuchen via CMD (5)

Frage von Element23 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Grafikkarten & Monitore
Win 10 Grafikkarte Crash von Software? (13)

Frage von Marabunta zum Thema Grafikkarten & Monitore ...

DSL, VDSL
DSL-Signal bewerten (10)

Frage von SarekHL zum Thema DSL, VDSL ...

Windows Server
Mailserver auf Windows Server 2012 (8)

Frage von StefanT81 zum Thema Windows Server ...

Backup
Clients als Server missbrauchen? (8)

Frage von 1410640014 zum Thema Backup ...