zeroblue2005
Goto Top

Batch um Regestry Einträge zu finden und zu löschen

Hallo Zusammen,

ich suche eine Möglichkeit einen Standardwert in der Regestry zu finden und dann diese alle zu löschen ohne Rückfrage?

Mit *.* habe ich es schon versucht, hat jemand eine Idee?

Danke

Content-ID: 301478

Url: https://administrator.de/contentid/301478

Ausgedruckt am: 22.11.2024 um 14:11 Uhr

114757
114757 11.04.2016 aktualisiert um 09:11:16 Uhr
Goto Top
Moin,
überhaupt schon mal die Doku gelesen ??? Da steht es schwarz auf weiß ...
http://ss64.com/nt/reg.html

Gruß jodel32
zeroblue2005
zeroblue2005 11.04.2016 aktualisiert um 09:30:31 Uhr
Goto Top
Wenn ich die verstehen würde, dann würde ich nicht fragen oder? Ich habe eine einfache Frage gestellt und kann auf deine Belehrung verzichten, Antworte oder lasse es bitte bleiben, Danke!
Mahagon
Mahagon 11.04.2016 um 09:33:34 Uhr
Goto Top
Du solltest es dir auf jeden Fall anschauen.
Skripte zu starten die man nicht versteht kann fatale Folgen haben ;)

Weiß auch nicht ob das sinnvoll ist das automatisch zu machen?
Wäre da sehr vorsichtig..

Was möchtest du denn erreichen?
Vielleicht gibt es ja einen "sicheren" Weg
zeroblue2005
zeroblue2005 11.04.2016 um 09:50:17 Uhr
Goto Top
Das meiste was ich weiß von Scripten verstehe ich aus fertigen Batch oder scripten! Ich habe immer Probleme mit den Syntax! Meist kann ich dann daraus und der Hilfe davon ableiten und verstehe es dann.

Ich versuche immer erst mich durchzubeißen und diese Sätze haste mal in... geschaut, finde ich hochgradig und bin es leid mich dafür zu rechtfertigen!

Ich habe das hier als Batch gebastelt:

for /f "delims=" %i in ('reg query HKEY_CLASSES_ROOT|findstr /i C:\Program Files\Test\test.ocx') do echo %%i
pause

Wobei ich hier nicht genau weiß, ist das eine *.reg oder eine *.bat

als *.bat reagiert er nicht auf meine Pause

und als *.reg

reg.exe for /f "delims=" %i in ('reg query HKEY_CLASSES_ROOT|findstr /i C:\Program Files\test\test.OCX') do echo %%i

Kommt er mit der for nicht klar! For kenne ich auch nur als batch CMD. Wenn ich den Script richtig interpretiere, dann sucht er doch nur den Standardwert oder da fehlt mir dann das löschen noch..
zeroblue2005
zeroblue2005 11.04.2016 um 09:53:54 Uhr
Goto Top
Auf deine Frage, warum das Ganze!

ich habe eine OCX Datei die Access braucht, die habe ich jetzt tausendfach in der Reg drin (Testsystem) und muss da mal sauber machen, sprich den Verweis auf die Datei aus dem ganzen System löschen!
117471
117471 11.04.2016 um 10:05:46 Uhr
Goto Top
Zitat von @zeroblue2005:

for /f "delims=" %i in ('reg query HKEY_CLASSES_ROOT|findstr /i C:\Program Files\Test\test.ocx') do echo %%i
pause

Wobei ich hier nicht genau weiß, ist das eine *.reg oder eine *.bat

Das ist eine .bat Datei.

Die durchsucht HKEC_CLASSES_ROOT nach der Zeichenkette test.ocx, gibt die jeweilige Zeile aus und wartet dann auf einen Tastendruck.

und als *.reg

Sei froh, wenn das keine Aktion ausgelöst hat. Wenn Windows das wirklich als .reg interpretiert hätte, wäre das Betriebssystem jetzt irreparabel zerstört. Aber glücklicherweise hast Du ja eine Fehlermeldung bekommen face-smile
114757
114757 11.04.2016 aktualisiert um 10:13:31 Uhr
Goto Top
@echo off
set "regpath=HKCR:\"  
set "searchstring=C:\Program Files\Test\test.ocx"  
powershell -Executionpolicy ByPass -Command "New-PSDrive -Name HKCR -PSProvider Registry -Root HKEY_CLASSES_ROOT ; gci '%regpath%' -Recurse | Get-ItemProperty | ?{$_.('(Default)') -eq '%searchstring%'} | %%{Set-ItemProperty -Path $_.PSPath -Name '(default)' -Value ''}"  
Sucht nach deinem String in den Default Werten und macht den jeweiligen (Default) Wert dann leer. Oder willst du stattdessen den ganzen Schlüssel löschen ?
zeroblue2005
zeroblue2005 11.04.2016 um 10:18:22 Uhr
Goto Top
He Jodel32,

das sieht aber gut aus face-smile Ich würde sagen besser löschen oder, sonst ist das soviel Müll drin oder was meinst du?
Biber
Biber 11.04.2016 um 10:19:45 Uhr
Goto Top
Moin FA-jka,


Zitat von @117471:

Zitat von @zeroblue2005:

for /f "delims=" %i in ('reg query HKEY_CLASSES_ROOT|findstr /i C:\Program Files\Test\test.ocx') do echo %%i
pause

Das ist eine .bat Datei.

Die durchsucht HKEC_CLASSES_ROOT nach der Zeichenkette test.ocx, gibt die jeweilige Zeile aus und wartet dann auf einen Tastendruck.

Ergänzend dazu:
Da würde diese Zeile in einem Batch tun, wenn
- immer zwei %-Zeichen vor der Laufvariable i stünden (aber vorne ist nur eines)
- das Pipe-Zeichen | mit einem Caret maskiert ware also "^|"
- der Parameter Zeichenkette-mit-Leerzeichen in Anführungszeichen gefasst werden würde (also "C:\Program Files\Test\.." }
- und der Findstr-Parameter statt nur /i geändert werden würde auf Findstr/ic: "C:\Program Files\Test\bla"

Dann liesse sich wenigstens ein Zwischenergebnis sehen.

Grüße
Biber
114757
Lösung 114757 11.04.2016 aktualisiert um 10:24:48 Uhr
Goto Top
Zitat von @zeroblue2005:
das sieht aber gut aus face-smile Ich würde sagen besser löschen oder, sonst ist das soviel Müll drin oder was meinst du?
Wenn du hinterher mit einem System da stehen willst das vermutlich vollkommen durcheinander geraten ist, gerne. Ich würde das nicht machen sondern ein Backup vor dem Stand des "Verhunzens" zurückspielen, oder jeden Eintrag manuell prüfen.

Aber bitte, wenn du unbedingt den ganzen Schlüssel löschen willst, probiers aus "auf eigene Gefahr"...
@echo off
set "regpath=HKCR:\"  
set "searchstring=C:\Program Files\Test\test.ocx"  
powershell -Executionpolicy ByPass -Command "New-PSDrive -Name HKCR -PSProvider Registry -Root HKEY_CLASSES_ROOT ; gci '%regpath%' -Recurse | Get-ItemProperty | ?{$_.('(Default)') -eq '%searchstring%'} | %%{remove-item $_.PSPath -Force}"  
117471
117471 11.04.2016 um 10:26:33 Uhr
Goto Top
Zitat von @Biber:

- der Parameter Zeichenkette-mit-Leerzeichen in Anführungszeichen gefasst werden würde

Ich lerne ja auch gerne dazu face-smile

Bei dem vorgenannten Punkt hätte ich jetzt aber eigentlich gedacht, dass das Leerzeichen durch das "delims=" nicht mehr als solches betrachtet wird. Normalerweise setzt Du die Default-Interpretation des Leerzeichens doch damit außer Kraft, oder?
Biber
Lösung Biber 11.04.2016 aktualisiert um 11:23:31 Uhr
Goto Top
Moin FA-jka,

die "delims=" beziehen sich ja auf die Ausgabeparameter der Anweisung, die in der FOR/F-Anweisung ausgeführt wird.
Der Parameter Zeichenkette-mit-Leerzeichen ist aber der Eingabeparameter von FinsStr.

Sonst hättest du recht.

Und der zusätzlich Kinken mit dem fehlenden Parameter "/C:" bei FindStr...

Ich machs mal als Demo am CMD-Prompt OHNE den Parameter "/ic:", also nur mit Parameter /i:
C:\Users\Biber>for /f "delims=" %i in ('reg query HKEY_CLASSES_ROOT^|findstr /i "C:\Program Files"') do @echo %i
HKEY_CLASSES_ROOT\AdobePDFMakerX.OutlookGuardianFileSelection
HKEY_CLASSES_ROOT\AllFilesystemObjects
HKEY_CLASSES_ROOT\FileSystemWMIProvider.FileSystemWMIProvider
HKEY_CLASSES_ROOT\FileSystemWMIProvider.FileSystemWMIProvider.1
HKEY_CLASSES_ROOT\IMAPI2FS.MsftFileSystemImage
HKEY_CLASSES_ROOT\IMAPI2FS.MsftFileSystemImage.1
HKEY_CLASSES_ROOT\SAPI.SpFileStream
HKEY_CLASSES_ROOT\SAPI.SpFileStream.1
HKEY_CLASSES_ROOT\ScanProfiles.ScanProfileMgr
HKEY_CLASSES_ROOT\ScanProfiles.ScanProfileMgr.1
HKEY_CLASSES_ROOT\ScanProfiles.ScanProfileUI
HKEY_CLASSES_ROOT\ScanProfiles.ScanProfileUI.1
HKEY_CLASSES_ROOT\Scripting.FileSystemObject
HKEY_CLASSES_ROOT\Search.FilesystemBackupProvider
HKEY_CLASSES_ROOT\Search.FilesystemBackupProvider.1
Ohne Parameter /C: werden alle "Worte" im String "C:\Program Files" gesucht.
Alle Fundstellen in diesem Fall sind Fundstellen des klein oder gross geschriebenen Wortes "Files".
Das war nicht der Plan des TO... ein sinngemäßes "del *.*" wäre wahrscheinlich auch nicht sein Wunsch.

Grüße
Biber
zeroblue2005
zeroblue2005 11.04.2016 um 11:15:15 Uhr
Goto Top
Hi Jodel,

kann und darf ich die Zeile Erweitern um *.*

Grund ist, dass es auch noch Einträge gibt, wo hinter dem:

set "searchstring=C:\Program Files\test\test.OCX, 10" <<< ein Komma mit Zahl kommt?

Oder anders gefragt, wenn ich C:\Program Files\test\ eingebe, wird dann alles gelöscht was diese Wert und alles was dahinter steht gelöscht?
114757
Lösung 114757 11.04.2016 aktualisiert um 11:22:07 Uhr
Goto Top
Zitat von @zeroblue2005:
Oder anders gefragt, wenn ich C:\Program Files\test\ eingebe, wird dann alles gelöscht was diese Wert und alles was dahinter steht gelöscht?
Dafür musst du den Vergleichsoperator in Zeile 4 von -eq in -like ändern, dann kannst du Wildcards (? / *) in deinem Suchstring verwenden. Man kann auch mit Regular-Expressions arbeiten, dann wäre es der Operator -match.
Alle Möglichkeiten zu den Vergleichsoperatoren kannst du hier nachlesen.
zeroblue2005
zeroblue2005 11.04.2016 um 11:39:35 Uhr
Goto Top
Saubere Sache Jodel,

hat geklappt! Vielen lieben Dank! Für alle die sich das später mal hier durchlesen:

JODEL hat mehr als Recht , das mit den Hart Löschen kann mehr als in die Hose gehen! Bei mir war das jetzt nicht Kritisch zu betrachten, weil es nur um einen Verweiß für eine Access Anwendung handelte, wo der Verweis zu 100% nur von dieser Access Anwendung benötigt wird! Jedoch auch ich habe das erst auf einem Testsystem geprüft, wo es egal war ob das Ding hoch geht oder eben nicht!

Danke an alle für die Hilfe...

PS:Alleine hätte ich da Wochen dran gesessen! face-wink