Tuxx Geschrieben 3. Februar 2005 Geschrieben 3. Februar 2005 Hi - hoffe es kann mir jemand helfen... Ich muss ein Batch-Script schreiben, dass die Registry nach bestimmten Schlüsseln einer Software durchsucht. Wenn das Batch einen Schlüssel findet, soll dieser im Fenster mit Registry-Pfad angezeigt werden... Hab keine Ahnung wie ich das machen soll.... Zitieren
bmg4ever Geschrieben 3. Februar 2005 Geschrieben 3. Februar 2005 also spontan würde ich bahupten, dass dir nix anderes übrig bleibt, als die registry daten zu exportieren, dann das exportierte file zu durchsuchen und die ergebnisse auszugeben. bei änderungen die datei wieder zu importieren und dann zu löschen: //Exportieren der Registry regedit /E exportfile.reg "HKEY_USERS" /*der letze parameter ist nicht zwingend und ist anzugeben, wenn man nur den entsprechenden Subkey exportieren will*/ //Reimport regedit /S exportfile.reg /* das "/S" ist zwar nicht erforderlich, aber bei einer batch schon, da es die Abfrage verhindert, ob man sich wirklich sicher ist*/ [/PHP] Zitieren
Tuxx Geschrieben 3. Februar 2005 Autor Geschrieben 3. Februar 2005 Gut - das funktioniert soweit... Wie kann ich jetzt eine Schleife realisieren, die nach mehrer Schlüssel in der Registry sucht und diese dann im CMD fenster anzeigt? Kann ich die Registry-Keys (sind mir bekannt) auch in ein extra File (txt) schreiben und dieses von der Batch dann auslesen lassen ob die darin installierten Keys noch vorhanden sind? Danke für die Hilfe.... Zitieren
bmg4ever Geschrieben 3. Februar 2005 Geschrieben 3. Februar 2005 //sowas in der art?? FOR /F %i IN (export.reg) DO IF /I "%i"=="KEY" echo %i [/PHP] Also auf der schiene musst du weiterarbeiten. Allerdings lass dir gesagt sein, dass ein batch IF beim Stringvergleich keine Wildcards unterstützt. Außerdem: Such mal bei google. Befehlsübersichten zu Batch dateine gibts auch im netz, z.B. hier oder hier Zitieren
Tuxx Geschrieben 4. Februar 2005 Autor Geschrieben 4. Februar 2005 Hallo - so sieht es im Moment aus. Aber irgendwie blick ich da noch nicht so durch... Hab mal ein paar Kommentare dazu geschrieben. --------------------------------------------------------------------------- @ECHO off CLS ECHO --------------------------------------------------------------------- ECHO Aktuelle Registry-Eintraege ECHO --------------------------------------------------------------------- ECHO. ECHO. ECHO. ECHO Die Registry wird nun in das File 'Export_Reg.txt' exportiert... REM Exportieren der Registry REM regedit /E Export_Reg.txt ECHO. ECHO Die Datei 'Export_Reg.txt' wird nun nach den Keys durchsucht... ECHO. ECHO Die folgenden Eintraege befinden sich noch in der Registry: REM Suchen nach einer Zeichenfolge in der Datei 'Export_Reg.txt' REM -> Das mit dem Find ist funktioniert - sieht aber nicht gut aus REM müsste da jeden Schlüssel so definieren und die Ausgabe ist REM auch nicht so toll... REM FIND "KEY1" /N Export_Reg.txt REM FIND "KEY2" /N Export_Reg.txt REM -> Die Schleife hört sich schon besser an, aber funktioniert noch nicht REM so richtig bei mir. Wo muss ich die Schlüssel definieren damit diese für den Suchlauf gelesen werden. FOR /F %i IN (Export_Reg.txt) DO IF /I "%i"=="KEY" echo "%i" ECHO. ECHO. ECHO. ECHO. PAUSE REM -----------------------EOF---------------------- Zitieren
bmg4ever Geschrieben 4. Februar 2005 Geschrieben 4. Februar 2005 puh... ich bin genr bereit dir zu helfen, aber ich bin auch nicht grade batch-programmer (wieos sollte man auch ). haste schonmal darüber nachgedacht das ganze in einer Hochsprache umzusetzen. da kann man das ergebnis dann auch schöner formatieren. aber zurück zum thema: eine liste von suchbegriffen könntest du in einer anderen textdatei speichern. //1. Inhalt der keys.txt: suchbegriff1 suchbegriff2 ... [/PHP] Dann die Batch: [PHP] .... FOR /F %i in (keys.txt) DO //durchsucht die keys.txt zeile für zeile und schtreibt die werte in i FIND "%i" /N regexport.txt //das wäre dann schonmal ne option. muss natürlich in einer Zeile stehen .... //2. option: FOR /F %i in (keys.txt) DO FOR /F %j IN (Export_Reg.txt) DO IF /I "%j"=="%i" echo "%j" > result.txt //sucht alle keys aus der keys.txt in der export_reg.txt und schreibt bei //übereinstimmung die Zeilen der reg-text-datei in die Datei result.txt //Danach kannste ja dann die Zeilen der result.txt so formatiert ausgebn, wie //du es gerne hättest Zitieren
Tuxx Geschrieben 4. Februar 2005 Autor Geschrieben 4. Februar 2005 Hallo - danke für Deine Hilfe, ich blicks glaub echt nicht... Habs jetzt so (REM bedeutet ja auskommentiert) und mich somit für Option 3 entschieden... Aber des läuft irgendwie nicht ******************************************************** @ECHO off CLS REM Variablen-Deklaration: SET i SET j ECHO Die Registry wird nun in das File 'Export_Reg.txt' exportiert... REM Exportieren der Registry REM regedit /E Export_Reg.txt ECHO. ECHO Die Datei 'Export_Reg.txt' wird nun nach Komponenten durchsucht... ECHO. ECHO Die folgenden Eintraege befinden sich noch in der Registry: REM Option 1: REM Suchen nach einer Zeichenfolge in der Datei 'Export_Reg.txt' REM FIND "KEY1" /N Export_Reg.txt REM FIND "KEY2" /N Export_Reg.txt REM Option 2: REM FOR /F %i in (Keys.txt) DO FIND "%i" /N Export_Reg.txt REM -> Durchsucht die Keys.txt zeile für zeile und Schreibt die werte in i REM -> das wäre dann schonmal ne option. muss natürlich in einer Zeile stehen REM option 3: FOR /F %i in (Keys.txt) DO FOR /F %j IN (Export_Reg.txt) DO IF /I "%j"=="%i" echo "%j" > result.txt REM -> Sucht alle keys aus der keys.txt in der export_reg.txt und schreibt bei REM -> Übereinstimmung die Zeilen der reg-text-datei in die Datei Result.txt REM -> Danach kannste ja dann die Zeilen der result.txt so formatiert ausgebn, wie REM -> du es gerne hättest Zitieren
bmg4ever Geschrieben 4. Februar 2005 Geschrieben 4. Februar 2005 tröste dich bei mir gehts auch nicht. ehrlich gesagt bin ich überfragt. wäre so nicht schlecht gewesen. aber ich hab auch noch nie mehrere batch befehle so verschachtelt. ich weiß nicht, ob es da was zu beachten gilt Zitieren
bmg4ever Geschrieben 4. Februar 2005 Geschrieben 4. Februar 2005 der witz ist: folgendes funktioniert: ----------------------------------------------- 1. FOR /F %i IN (keys.txt) echo %i >> a.txt 2. FOR /F %i IN (keys.txt) echo %i ----------------------------------------------- aber das hier geht dann nicht mehr ----------------------------------------------- 1. FOR /F %i IN (export.txt) echo %i >> a.txt 2. FOR /F %i IN (export.txt) echo %i ----------------------------------------------- diese dumme for-schleife geht den export.txt nicht durch. und ich hab auch herausgefunden warum. der regedit export befehl erzeugt ja keine textdatei nach dem ansi-zeichensatz, auch wenn du sie .txt nennst. die exportierte datei ist im unicode. sie muss erst einmal im ANSI-Format abgespeichert werden. dann gehts. Zitieren
bmg4ever Geschrieben 4. Februar 2005 Geschrieben 4. Februar 2005 Ok das hier hab ich hier gefunden @Echo Off echo UniCode to ANSI converter for TXT. md ~ANSI for %%a in (export.txt) do type "%%a">"~ANSI\%%a" for %%a in (export.txt) do attrib -r -h -s "%%a" cd ~ANSI for %%a in (export.txt) do move /y "%%a" .. cd.. rd ~ANSI [/PHP] dies Batch-Datei konvertiert die angegebene textdatei von unicode zu ansi. was genau da passiert kann ich dir auch net sagen, aber es funktioniert. Zitieren
ryoorox Geschrieben 22. Januar 2009 Geschrieben 22. Januar 2009 Hallo, ich bin schon seit einigen Tagen am rumprobieren. Bin so langsam am zweifeln ob das alles überhaupt so funktioniert wie ich mir das vorstelle. ich lese die komplette registry aus und möchte dann mit stichworten nach bestimmten schlüsseln suchen.. zB: Stichwort: Python und ausgeben soll er mir dann beispielsweise: HKEY_LOCAL_MACHINE\SOFTWARE\Python Grund warum ich das so brauche... ich möchte mit stichworten schlüssel suchen, da ich nicht alle schlüssel auswendig weiß und möchte dann alle schlüssel die was mit python zutun haben automatisch löschen... gibt es diese möglichkeit überhaupt? lg ryoorox edit: alles mit batch, sollte ich noch dazu sagen! Zitieren
Maulwurf_der_Schlaue Geschrieben 23. Januar 2009 Geschrieben 23. Januar 2009 Hallo, [...] dies Batch-Datei konvertiert die angegebene textdatei von unicode zu ansi. was genau da passiert kann ich dir auch net sagen, aber es funktioniert. Regedit /a Speichert die Schlüssel gleich im ASCII-Format. Zitieren
Maulwurf_der_Schlaue Geschrieben 30. Januar 2009 Geschrieben 30. Januar 2009 Hi ryoorox, wegen deinem Problem mit der Registry - per Batch - zu analysieren und entsprechende Keys anschließend zu löschen. Hier ein Lösung an welcher ich in letzter Zeit gebastelt habe, war gar nicht so einfach [Hinweis] Das Skript manipuliert die Windows-Registrierungsdatei, Daten werden unwiderruflich gelöscht. Das Skript muss aus Sicherheitsgründen noch angepasst werden damit Daten endgültig gelöscht werden. Wer das Skript dementsprechend ändert ist sich bewusst was er macht! reg_analyzer.bat @echo off setlocal ENABLEDELAYEDEXPANSION CLS rem ****************************************************************** rem ** Einstellungen koennen hier vorgenommen werden ! START ** rem ****************************************************************** set suchdatei=suche.txt set regfile=reg.tmp set trefferdatei=treffer.txt set tmptreffer=treffer.tmp rem ****************************************************************** rem ** Einstellungen koennen hier vorgenommen werden ! ENDE ** rem ****************************************************************** if EXIST %trefferdatei% (del %trefferdatei%) if EXIST %tmptreffer% (del %tmptreffer%) if EXIST %regfile% (del %regfile%) echo. echo ?????????????????????????????????????????????????????????????????? echo ?? Durchsucht Windows-Registry nach gewunschten Suchbegriffen ?? echo ?????????????????????????????????????????????????????????????????? for /F "delims=/" %%a in ('ver') do ( if NOT "%%a" == "Microsoft Windows [Version 6.0.6001]" ( echo. echo ?????????????????????????????????????????????????????????????????? echo ?? Achtung: Dieses Skript basiert auf Windows Vista SP1 ?? echo ?? ?? echo ?? Sie scheinen eine andere Betriebssystemversion zu verwenden. ?? echo ?? Es wird empfohlen das Skript NICHT auszufuehren. ?? echo ?????????????????????????????????????????????????????????????????? echo ?? Schliessen Sie das Fenster einfach um das Skript zu beenden, ?? echo ?? anderfalls wird das Skript die Ausfuehrung fortsetzen. ?? echo ?????????????????????????????????????????????????????????????????? PAUSE ) ) echo. echo Suchbegriffe sind: for /F "" %%i in (%suchdatei%) do echo - '%%i' echo. echo ?????????????????????????????????????????????????????????????????? set regkey=HKLM :next if EXIST %regfile% (del %regfile%) echo. echo Exportiere Registry-Struktur !regkey! ... reg export !regkey! %cd%\%regfile% if NOT EXIST %regfile% ( echo. echo ?????????????????????????????????????????????????????????????????? echo ?? Achtung: Datei %regfile% konnte nicht erstellt werden? ?? echo ?? ?? echo ?? - Schreibberechtigung in %cd%\ vorhanden? ?? echo ?? - Berechtigung zum oeffnen des Registry-Editors? ?? echo ?????????????????????????????????????????????????????????????????? echo. goto Ende: ) echo Suche in !regkey! laeuft... for /f %%a in (%suchdatei%) do ( FIND /I "%%a" %regfile% >> %tmptreffer% ) set MinEinTreffer=0 for /f "tokens=1,2 delims=/" %%a in (%tmptreffer%) do ( set Wert=%%a if "!Wert:~0,1!" == "[" ( echo "!Wert:~1,-1!" >> %trefferdatei% set MinEinTreffer=1 ) ) set Wert= echo Suche in !regkey! abgeschlossen. if "!regkey!" == "HKLM" ( set regkey=HKCU goto Next: ) if "!regkey!" == "HKCU" ( set regkey=HKCR rem *** HKEY_CURRENT_ROOT (HKCR) kann aus unbekannten Grund rem *** nicht ausgewertet werden, vllt. bin ich auch rem *** zu ungeduldig aber 5 Minuten warten ist zu lang rem goto Next: ) if "!regkey!" == "HKCR" ( set regkey=HKU goto Next: ) if "!regkey!" == "HKU" ( set regkey=HKCC goto Next: ) echo. echo Suche komplett abgeschlossen. echo. del %regfile% del %tmptreffer% if "!MinEinTreffer!" == "1" ( echo Trefferdatei wurde geoeffnet. notepad %trefferdatei% echo. echo ??????????????????????????????????????????????????????????????????????????? echo ?? ?? echo ?? WARNUNG: Registry-Einträge werden geloescht, weiter auf eigene Gefahr ?? echo ?? ?? echo ?? WARNUNG: Registry-Einträge werden geloescht, weiter auf eigene Gefahr ?? echo ?? ?? echo ?? WARNUNG: Registry-Einträge werden geloescht, weiter auf eigene Gefahr ?? echo ?? ?? echo ??????????????????????????????????????????????????????????????????????????? echo. Pause rem for /F "delims=@" %%a in (%trefferdatei%) do ( rem echo Loesche '%%a'... rem reg delete %%a /f ) ) ELSE ( echo Keine Treffer gefunden! ) echo. echo ?????????????????????????????????????????????????????????????????? echo ?? Durchsuchen der Windows-Registry abgeschlossen ?? echo ?????????????????????????????????????????????????????????????????? :Ende set suchdatei= set regfile= set trefferdatei= set tmptreffer= set Wert= set MinEinTreffer= set regkey= [/PHP] suche.txt [PHP] Python (Pro Zeile ein Suchbegriff; Groß/Kleinschreibung ist egal) Hoffe das es Fehlerfrei ist, bei mir hat es jedenfalls ohne Probleme funktioniert. Zitieren
Maulwurf_der_Schlaue Geschrieben 30. Januar 2009 Geschrieben 30. Januar 2009 [ Tschuldigung, irgendwie war mein Eintrag jetzt doppelt ] Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.