Um leere Verzeichnisse aufzuspüren und zu löschen, kann man sich eine Eigenart des »RD«-Kommandos1) (Remove Directory) zu Nutze machen, welches ohne Angabe weiterer Parameter nur leere Verzeichnisse löscht. In einer »FOR-Schleife«2) kann man nun den »DIR«-Befehl3) mit einigen Argumenten (/AD) anweisen nur Verzeichnisse zu suchen und die Ausgabe in eine Variable schreiben lassen. Damit Verzeichnisse, welche zB nur ein leeres Verzeichnis enthalten ebenfalls gelöscht werden, kehrt man die Ausgabe mit den »SORT«-Befehl4) um, andernfalls würde das Verzeichnis, welches ursprünglich das leere Verzeichnis beinhaltet hat, stehen bleiben.
Eine Batch Datei könnte nun zB wie folgt aussehen:
rmemptydir.bat
@echo off set gotodir="%TEMP%" FOR /F "tokens=* delims=" %%i in ('dir /AD /B /S %gotodir% ^| sort /R' ) do ( RD "%%i" 2>nul && echo DELETE %%i )
In dieser FOR-Schleife wird der DIR-Befehl angewiesen, im Verzeichnis %TEMP% nur alle Verzeichnisse (/AD) und Unterverzeichnisse (/S) zu suchen, die Ausgabe im einfachen Format (/B → nur den Namen, keine Größe, keine Zusammenfassung etc) an den SORT-Befehl weiterzuleiten, welcher die Ausgabe einfach nur umkehrt (/R) und jedes gefundene Element in die Variable »%i« zu schreiben. Das zweite %-Zeichen bei der Variablendeklaration ist in Batch-Dateien notwendig und das ^-Zeichen vor der Pipe »|« ist in der FOR-Schleife notwendig, damit dieses Zeichen vor der Interpretation geschützt (maskiert) wird. Jedes Element (in der Variable %i) wird nun durch die DO-Anweisung an den RD-Befehl weitergeleitet, welcher versucht die Verzeichnisse zu löschen aber jeder Löschversuch eines nicht leeren Verzeichnis scheitert und erzeugt einen Fehler, welcher aber in der Ausgabe unterdrückt (2>nul) wird. Des Weiteren wird jedes gelöschte Verzeichnis in der Standardausgabe angezeigt (echo DELETE %i)
Verwandte Artikel:
-> (Batch) TEMP-Verzeichnisse beim Shutdown/Logoff löschen
— pronto 2011/02/13 16:04