Registry-Einträge mit Batch Skript filtern/löschen

Info

Relativ einfache Anforderung: Es sollen Registry Keys nach bestimmten Inhalten durchsucht und diese dann herausgefiltert werden. Gesucht wird sowohl in den Attributbezeichnern als auch in den Werten, Achtung an dieser Stelle, dass nicht zu viel gelöscht wird.
Kurzes Beispiel:
registry-filtern-mit-batch-beispiel
Das Skript könnte mit dem Filter „Memento“ die ersten fünf Einträge herauslöschen. Mit „Version“ oder „Client“ würde jeweils ein Eintrag gelöscht werden. Somit ist das Skript wie ein Regex-ähnlicher Filter zum Löschen von Registry-Einträgen zu sehen.
Außerdem habe ich das Skript in zwei verschiedenen Varianten programmiert: Variante 1 ist einfach und arbeitet 1 Filteranfrage ab. Variante 2 verbaut den Code in einer Funktion und kann beliebig oft mit unterschiedlichen Filterparametern aufgerufen werden. Beide Skript sind durch möglichst viele Variablen gut anpassbar für den schnellen Einsatz.

Code

Variante 1: 1 Filter anwenden:

@echo on & color 9f & setlocal
::REM EDIT VARIABLES
set wd=%userprofile%\Desktop
set originalreg=%wd%\original.reg
set filteredreg=%wd%\filtered.reg
set regkey=HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\FileZilla Client
set filter=asd
::REM END VARIABLES

::REM useage: call filter "regkey","whattofilter"
reg export "%regkey%" "%originalreg%"
if exist "%originalreg%" (
goto true
) else (
goto end
)
:true
find /v /i "%filter%" < %originalreg% > %filteredreg%
reg delete "%regkey%" /f
reg import %filteredreg%
del %originalreg% /F
del %filteredreg% /F

:end
endlocal

Variante 2: Beliebig viele verschiedene Filter anwenden:

@echo on & color 9f & setlocal
::REM EDIT VARIABLES
set wd=%userprofile%\Desktop
set originalreg=%wd%\original.reg
set filteredreg=%wd%\filtered.reg
::REM END VARIABLES

call:filter "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\FileZilla Client","asd"
call:filter "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\FileZilla Client","23"
call:filter "HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\FileZilla Client","!§"

goto end

::REM useage: call filter "regkey","whattofilter"
:filter
reg export "%~1" "%originalreg%"
if exist "%originalreg%" (
goto true
) else (
goto end
)
:true
find /v /i "%~2" < %originalreg% > %filteredreg%
reg delete "%~1" /f
reg import %filteredreg%
del %originalreg% /F
del %filteredreg% /F
goto:EOF

:end
endlocal

registry-filtern-mit-batch-skript-in-action

Schreibe einen Kommentar