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.


  CleanSystem.bat

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

  1. Kontrolle der Konsolenausgabe
  2. Prüfung der Datei %TEMP%\CleanSystem.log
  3. Prüfung, ob die erwarteten Verzeichnisse geleert wurden
  4. Prüfung des Dienststatus von wuauserv
  5. 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.