Systembereinigung und Löschen von temporären Dateien
Zweck
Das Batchskript CleanSystem.bat bereinigt temporäre Dateien, Browserdaten, Windows-Verläufe und ausgewählte Systemverzeichnisse.
Die Ausführung erfolgt in zwei getrennten Phasen:
- Bereinigung im Benutzerkontext ohne administrative Berechtigungen
- Bereinigung von Systemverzeichnissen mit administrativen Berechtigungen
Während der Ausführung schreibt das Skript ein Protokoll in die Datei %TEMP%\CleanSystem.log.
|
|
|
@echo off :: ============================================================ :: CleanSystem.bat :: Phase 1 (User): Clean the temp data and history of the :: logged-on user - no admin rights required. :: Phase 2 (Admin): UAC prompt; on "Yes" the system temp :: folders are cleaned. :: ============================================================ setlocal EnableExtensions set "LOG=%TEMP%\CleanSystem.log" :: Elevated instance? -> run Phase 2 only if /i "%~1"=="/system" goto :SystemPhase :: ============================================================ :: PHASE 1 - User context :: ============================================================ echo ============================================================ >> "%LOG%" echo %DATE% %TIME% - Phase 1 (user: %USERNAME%) started >> "%LOG%" echo. echo ===== Phase 1: User data (%USERNAME%) ===== echo. echo --- Closing browsers --- for %%P in (msedge chrome firefox iexplore) do ( taskkill /F /IM %%P.exe >nul 2>&1 ) echo. echo --- User temp --- call :Clean "%TEMP%" call :Clean "%LocalAppData%\Microsoft\Windows\INetCache" call :Clean "%LocalAppData%\Microsoft\Windows\Explorer" call :Clean "%LocalAppData%\CrashDumps" call :Clean "%LocalAppData%\Microsoft\Windows\WER" echo. echo --- Explorer history (Recent items / Quick Access / Run) --- call :Clean "%AppData%\Microsoft\Windows\Recent" reg delete "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU" /f >nul 2>&1 reg delete "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\TypedPaths" /f >nul 2>&1 reg delete "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs" /f >nul 2>&1 echo. echo --- Microsoft Edge --- set "EDGE=%LocalAppData%\Microsoft\Edge\User Data\Default" call :Clean "%EDGE%\Cache" call :Clean "%EDGE%\Code Cache" call :Clean "%EDGE%\GPUCache" call :DelFile "%EDGE%\History" call :DelFile "%EDGE%\History-journal" call :DelFile "%EDGE%\Visited Links" call :DelFile "%EDGE%\Top Sites" call :DelFile "%EDGE%\Top Sites-journal" echo. echo --- Google Chrome --- set "CHROME=%LocalAppData%\Google\Chrome\User Data\Default" call :Clean "%CHROME%\Cache" call :Clean "%CHROME%\Code Cache" call :Clean "%CHROME%\GPUCache" call :DelFile "%CHROME%\History" call :DelFile "%CHROME%\History-journal" call :DelFile "%CHROME%\Visited Links" call :DelFile "%CHROME%\Top Sites" call :DelFile "%CHROME%\Top Sites-journal" echo. echo --- Mozilla Firefox --- for /d %%D in ("%AppData%\Mozilla\Firefox\Profiles\*") do ( call :DelFile "%%~D\places.sqlite" call :DelFile "%%~D\places.sqlite-wal" call :DelFile "%%~D\formhistory.sqlite" ) for /d %%D in ("%LocalAppData%\Mozilla\Firefox\Profiles\*") do ( call :Clean "%%~D\cache2" ) echo. echo --- Internet Explorer / WinINet history --- RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 255 >nul 2>&1 echo. echo --- Recycle Bin --- powershell -NoProfile -Command "Clear-RecycleBin -Force -ErrorAction SilentlyContinue" echo. echo --- DNS cache --- ipconfig /flushdns >nul echo %DATE% %TIME% - Phase 1 completed >> "%LOG%" :: ============================================================ :: Elevation for Phase 2 :: ============================================================ echo. echo ===== Phase 2: System temp folders (admin rights required) ===== echo UAC prompt will be displayed... net session >nul 2>&1 if %errorlevel% equ 0 ( :: Already running as admin - continue directly call "%~f0" /system goto :End ) powershell -NoProfile -Command ^ "try { $p = Start-Process -FilePath '%~f0' -ArgumentList '/system' -Verb RunAs -Wait -PassThru; exit $p.ExitCode } catch { exit 1223 }" if %errorlevel% equ 1223 ( echo. echo UAC declined - system folders were NOT cleaned. echo %DATE% %TIME% - Phase 2 skipped ^(UAC declined^) >> "%LOG%" ) :End echo. echo Done. Log: %LOG% pause exit /b 0 :: ============================================================ :: PHASE 2 - Admin context (invoked with /system) :: ============================================================ :SystemPhase echo %DATE% %TIME% - Phase 2 (admin) started >> "%LOG%" echo. echo ===== Phase 2: System folders ===== call :Clean "%SystemRoot%\Temp" call :Clean "%SystemRoot%\Prefetch" call :Clean "%SystemRoot%\Logs\CBS" call :Clean "%SystemRoot%\SoftwareDistribution\Download" call :Clean "%SystemRoot%\Minidump" call :DelFile "%SystemRoot%\MEMORY.DMP" call :Clean "%ProgramData%\Microsoft\Windows\WER\ReportArchive" call :Clean "%ProgramData%\Microsoft\Windows\WER\ReportQueue" echo. echo --- Windows Update cache (service is stopped briefly) --- net stop wuauserv >nul 2>&1 call :Clean "%SystemRoot%\SoftwareDistribution\Download" net start wuauserv >nul 2>&1 echo %DATE% %TIME% - Phase 2 completed >> "%LOG%" echo. echo System folders cleaned. timeout /t 3 >nul exit /b 0 :: ------------------------------------------------------------ :: :Clean <folder> - deletes the contents, not the folder itself :: ------------------------------------------------------------ :Clean if not exist "%~1" exit /b echo Emptying: %~1 echo Emptying: %~1 >> "%LOG%" del /f /s /q "%~1\*" >nul 2>&1 for /d %%X in ("%~1\*") do rd /s /q "%%~X" >nul 2>&1 exit /b :: ------------------------------------------------------------ :: :DelFile <file> :: ------------------------------------------------------------ :DelFile if not exist "%~1" exit /b echo Deleting: %~1 echo Deleting: %~1 >> "%LOG%" del /f /q "%~1" >nul 2>&1 exit /b |
Voraussetzungen
Für die Ausführung gelten folgende Voraussetzungen:
- Unterstützte Windows-Umgebung
- Zugriff auf die lokale Batchdatei
- PowerShell für die Anforderung administrativer Berechtigungen und das Leeren des Papierkorbs
- Administrative Berechtigungen für die Bereinigung der Systemverzeichnisse
- Schreibberechtigung im temporären Verzeichnis des angemeldeten Benutzerkontos
Die Bereinigung der benutzerbezogenen Daten ist ohne administrative Berechtigungen möglich.
Für die zweite Phase zeigt Windows eine UAC-Abfrage an.
Bei Ablehnung der UAC-Abfrage wird die Systembereinigung übersprungen.
Aufruf
Das Skript wird über die Batchdatei gestartet:
|
|
CleanSystem.bat |
Beim regulären Aufruf wird zuerst die Benutzerbereinigung ausgeführt.
Anschliessend fordert das Skript administrative Berechtigungen für die Systembereinigung an.
Der interne Aufruf der Systemphase erfolgt mit dem Parameter:
|
|
CleanSystem.bat /system |
Der Parameter /system ist für die elevierte Instanz des Skripts vorgesehen und überspringt die Benutzerphase.
Ablaufübersicht
Phase 1: Bereinigung im Benutzerkontext
Die erste Phase wird mit den Berechtigungen des angemeldeten Benutzerkontos ausgeführt. Sie umfasst folgende Aktionen:
- Beenden unterstützter Browserprozesse
- Bereinigen temporärer Benutzerdaten
- Löschen von Explorer-Verläufen
- Bereinigen lokaler Browserdaten
- Leeren des Papierkorbs
- Leeren des DNS-Caches
- Protokollieren von Start und Abschluss
Für diese Phase sind keine administrativen Berechtigungen erforderlich.
Phase 2: Bereinigung im Administratorkontext
Nach Abschluss der Benutzerphase prüft das Skript, ob bereits administrative Berechtigungen vorliegen.
Ist dies nicht der Fall, wird über PowerShell eine UAC-Abfrage ausgelöst.
Bei erteilter Berechtigung startet eine zweite Skriptinstanz mit dem Parameter /system.
Bei Ablehnung wird die zweite Phase nicht ausgeführt und ein entsprechender Eintrag in das Protokoll geschrieben.
Bereinigung im Benutzerkontext
Beenden von Browserprozessen
Vor der Bereinigung versucht das Skript, folgende Browserprozesse zu beenden:
- Microsoft Edge: msedge.exe
- Google Chrome: chrome.exe
- Mozilla Firefox: firefox.exe
- Internet Explorer: iexplore.exe
Das Beenden erfolgt erzwungen über taskkill. Nicht gespeicherte Browserinhalte können dadurch verloren gehen.
Temporäre Benutzerdateien
Das Skript löscht die Inhalte der folgenden Verzeichnisse:
- %TEMP%
- %LocalAppData%\Microsoft\Windows\INetCache
- %LocalAppData%\Microsoft\Windows\Explorer
- %LocalAppData%\CrashDumps
- %LocalAppData%\Microsoft\Windows\WER
Die Verzeichnisse selbst bleiben bestehen. Gelöscht werden enthaltene Dateien und Unterverzeichnisse, sofern der jeweilige Zugriff möglich ist.
Explorer-Verlauf
Folgende benutzerbezogene Explorer-Daten werden bereinigt:
- %AppData%\Microsoft\Windows\Recent
Zusätzlich löscht das Skript folgende Registrierungsschlüssel im Benutzerkontext:
- HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU
- HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\TypedPaths
- HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\RecentDocs
Damit werden Einträge aus „Ausführen“, eingegebene Explorer-Pfade und zuletzt verwendete Dokumente entfernt.
Microsoft Edge
Für das Standardprofil von Microsoft Edge werden folgende Cacheverzeichnisse geleert:
- %LocalAppData%\Microsoft\Edge\User Data\Default\Cache
- %LocalAppData%\Microsoft\Edge\User Data\Default\Code Cache
- %LocalAppData%\Microsoft\Edge\User Data\Default\GPUCache
Zusätzlich werden folgende Dateien gelöscht:
- History
- History-journal
- Visited Links
- Top Sites
- Top Sites-journal
Die Verarbeitung bezieht sich ausschliesslich auf das Profilverzeichnis Default. Weitere Edge-Profile sind im Skript nicht berücksichtigt.
Google Chrome
Für das Standardprofil von Google Chrome werden folgende Cacheverzeichnisse geleert:
- %LocalAppData%\Google\Chrome\User Data\Default\Cache
- %LocalAppData%\Google\Chrome\User Data\Default\Code Cache
- %LocalAppData%\Google\Chrome\User Data\Default\GPUCache
Zusätzlich werden folgende Dateien gelöscht:
- History
- History-journal
- Visited Links
- Top Sites
- Top Sites-journal
Die Verarbeitung bezieht sich ausschliesslich auf das Profilverzeichnis Default. Weitere Chrome-Profile sind im Skript nicht berücksichtigt.
Mozilla Firefox
Für alle gefundenen Firefox-Profile im Roaming-Profilpfad löscht das Skript folgende Dateien:
- places.sqlite
- places.sqlite-wal
- formhistory.sqlite
Der betroffene Profilpfad lautet:
- %AppData%\Mozilla\Firefox\Profiles\*
Zusätzlich wird für alle gefundenen lokalen Firefox-Profile das Verzeichnis cache2 geleert:
- %LocalAppData%\Mozilla\Firefox\Profiles\*\cache2
- ``
Die genannten SQLite-Dateien können unter anderem Verlaufs-, Lesezeichen- und Formulardaten enthalten. Das Skript führt vor dem Löschen keine Sicherung dieser Dateien durch.
Internet Explorer und WinINet
Die Bereinigung der Internet-Explorer- und WinINet-Daten erfolgt mit folgendem Aufruf:
- RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 255
Die Ausgabe des Befehls wird unterdrückt.
Papierkorb
Das Leeren des Papierkorbs erfolgt über PowerShell:
- Clear-RecycleBin -Force -ErrorAction SilentlyContinue
Die Aktion wird ohne weitere Rückfrage ausgeführt. Auftretende Fehler werden unterdrückt.
DNS-Cache
Der lokale DNS-Auflösungscache wird mit folgendem Befehl geleert:
- ipconfig /flushdns
Die Befehlsausgabe wird unterdrückt.
Bereinigung im Administratorkontext
Systemverzeichnisse
In der zweiten Phase leert das Skript die Inhalte folgender Systemverzeichnisse:
- %SystemRoot%\Temp
- %SystemRoot%\Prefetch
- %SystemRoot%\Logs\CBS
- %SystemRoot%\SoftwareDistribution\Download
- %SystemRoot%\Minidump
- %ProgramData%\Microsoft\Windows\WER\ReportArchive
- %ProgramData%\Microsoft\Windows\WER\ReportQueue
Zusätzlich wird folgende Speicherabbilddatei gelöscht, sofern sie vorhanden ist:
- %SystemRoot%\MEMORY.DMP
Die Verzeichnisse selbst werden nicht gelöscht.
Windows-Update-Cache
Für die erneute Bereinigung des Windows-Update-Downloadverzeichnisses führt das Skript folgende Aktionen aus:
- Beenden des Dienstes wuauserv
- Leeren von %SystemRoot%\SoftwareDistribution\Download
- Starten des Dienstes wuauserv
Die Befehlsausgaben und mögliche Fehlermeldungen werden dabei unterdrückt.
Löschfunktionen
Funktion Clean
Die interne Funktion Clean erhält einen Verzeichnispfad als Parameter. Ist das Verzeichnis vorhanden, werden alle enthaltenen Dateien und Unterverzeichnisse gelöscht.
Verwendete Befehle:
- del /f /s /q "<Verzeichnis>\*"
und
- rd /s /q "<Unterverzeichnis>"
Bedeutung der verwendeten Optionen:
- /f: Erzwingt das Löschen schreibgeschützter Dateien.
- /s: Verarbeitet Dateien beziehungsweise Verzeichnisse rekursiv.
- /q: Unterdrückt Bestätigungsabfragen.
Das übergebene Stammverzeichnis bleibt bestehen.
Funktion DelFile
Die interne Funktion DelFile löscht eine einzelne Datei, sofern diese vorhanden ist:
- del /f /q "<Datei>"
Das Löschen erfolgt erzwungen und ohne Bestätigungsabfrage.
Protokollierung
Das Protokoll wird im temporären Verzeichnis des Kontos geführt, unter dem die jeweilige Skriptphase ausgeführt wird:
- %TEMP%\CleanSystem.log
Das Skript protokolliert:
- Start der Benutzerphase
- angemeldeten Benutzernamen
- bearbeitete Verzeichnisse und Dateien
- Abschluss der Benutzerphase
- Start der Systemphase
- Abschluss der Systemphase
- Überspringen der Systemphase bei abgelehnter UAC-Abfrage
Die Einträge werden an eine vorhandene Protokolldatei angehängt.
Fehlerbehandlung
Die meisten Befehlsausgaben und Fehlermeldungen werden nach nul umgeleitet.
Nicht vorhandene Dateien oder Verzeichnisse werden durch die Funktionen übersprungen.
Dadurch läuft das Skript bei einzelnen Zugriffs- oder Löschfehlern weiter.
Detaillierte Fehlermeldungen und Rückgabecodes der einzelnen Bereinigungsschritte werden jedoch nicht im Protokoll erfasst.
Wird die UAC-Abfrage abgelehnt, beendet PowerShell den Elevationsversuch mit dem im Skript ausgewerteten Rückgabecode 1223.
Die Systemphase wird anschliessend als übersprungen protokolliert.
Auswirkungen und Sicherheitshinweise
Vor der Ausführung sind folgende Auswirkungen zu berücksichtigen:
- Geöffnete Browser werden ohne Speicheraufforderung beendet.
- Browser-Verläufe, Cachedateien und häufig besuchte Seiten werden gelöscht.
- Firefox-Verlaufs-, Lesezeichen- und Formulardaten können durch das Löschen der SQLite-Dateien betroffen sein.
- Explorer-Verläufe und zuletzt verwendete Elemente werden entfernt.
- Der Papierkorb wird ohne Rückfrage geleert.
- Windows-Fehlerberichte, Minidumps und die Datei MEMORY.DMP werden gelöscht.
- CBS-Protokolle werden entfernt.
- Der Windows-Update-Dienst wird während der Systemphase gestoppt und anschliessend wieder gestartet.
- Fehler einzelner Löschvorgänge sind wegen der Ausgabeumleitung nicht unmittelbar sichtbar.
- Eine Wiederherstellung der gelöschten Daten ist durch das Skript nicht vorgesehen.
Abbruch und Teilausführung
Bei Ablehnung der UAC-Abfrage bleibt die bereits abgeschlossene Benutzerbereinigung bestehen.
Ausschliesslich die administrative Systemphase wird übersprungen.
Nach Abschluss der Benutzerphase zeigt das Skript den Pfad der Protokolldatei an und wartet über pause auf eine Eingabe.
Die administrative Instanz beendet sich nach einer Wartezeit von drei Sekunden automatisch.
Technische Einschränkungen
- Das vorliegende Skript weist folgende technische Einschränkungen auf:
- Microsoft Edge und Google Chrome werden nur im Profil Default bereinigt.
- Die Rückgabecodes einzelner Lösch- und Dienstbefehle werden nicht ausgewertet.
- Fehlerdetails werden nicht protokolliert.
- Bereits geöffnete oder gesperrte Dateien können möglicherweise nicht gelöscht werden.
- Der Windows-Update-Dienst wird unabhängig vom ursprünglichen Dienstzustand am Ende der Bereinigung gestartet.
- Die administrative Instanz verwendet %TEMP% in ihrem eigenen Ausführungskontext. Dadurch kann die Systemphase abhängig vom verwendeten Administratorkonto in eine andere Protokolldatei schreiben als die Benutzerphase.
- Die Bereinigung von %SystemRoot%\SoftwareDistribution\Download erfolgt innerhalb der Systemphase zweimal.
- Für gelöschte Diagnose-, Verlaufs- und Browserdaten existiert keine integrierte Sicherungs- oder Wiederherstellungsfunktion.
Ergebnisprüfung
Nach der Ausführung stehen folgende Prüfmöglichkeiten zur Verfügung:
- Kontrolle der Konsolenausgabe
- Prüfung der Datei %TEMP%\CleanSystem.log
- Prüfung, ob die erwarteten Verzeichnisse geleert wurden
- Prüfung des Dienststatus von wuauserv
- Prüfung, ob die Systemphase im Protokoll als abgeschlossen oder als übersprungen vermerkt wurde
Da das Skript keine detaillierten Fehler protokolliert, bestätigt ein aufgeführter Pfad lediglich den gestarteten Bereinigungsversuch.
Ein vollständiger Löscherfolg lässt sich daraus nicht für jede einzelne Datei ableiten.

