Zum Inhalt springen

Batch soll Registry durchsuchen...


Empfohlene Beiträge

Geschrieben

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

Geschrieben

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]

Geschrieben

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

Geschrieben


//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

Geschrieben

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

Geschrieben

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

Geschrieben

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

Geschrieben

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

Geschrieben

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.

Geschrieben

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.

  • 3 Jahre später...
Geschrieben

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!

Geschrieben

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.

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...