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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 301478
Url: https://administrator.de/contentid/301478
Ausgedruckt am: 22.11.2024 um 14:11 Uhr
15 Kommentare
Neuester Kommentar
Moin,
überhaupt schon mal die Doku gelesen ??? Da steht es schwarz auf weiß ...
http://ss64.com/nt/reg.html
Gruß jodel32
überhaupt schon mal die Doku gelesen ??? Da steht es schwarz auf weiß ...
http://ss64.com/nt/reg.html
Gruß jodel32
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
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
@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 ''}"
Moin FA-jka,
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
Dann liesse sich wenigstens ein Zwischenergebnis sehen.
Grüße
Biber
Zitat von @117471:
Die durchsucht HKEC_CLASSES_ROOT nach der Zeichenkette test.ocx, gibt die jeweilige Zeile aus und wartet dann auf einen Tastendruck.
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.for /f "delims=" %i in ('reg query HKEY_CLASSES_ROOT|findstr /i C:\Program Files\Test\test.ocx') do echo %%i
pause
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
Zitat von @zeroblue2005:
das sieht aber gut aus 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.das sieht aber gut aus Ich würde sagen besser löschen oder, sonst ist das soviel Müll drin oder was meinst du?
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}"
Zitat von @Biber:
- der Parameter Zeichenkette-mit-Leerzeichen in Anführungszeichen gefasst werden würde
- der Parameter Zeichenkette-mit-Leerzeichen in Anführungszeichen gefasst werden würde
Ich lerne ja auch gerne dazu
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?
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:
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
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
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
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.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?
Alle Möglichkeiten zu den Vergleichsoperatoren kannst du hier nachlesen.