Batch zum entfernen leerer Ordner in einem Verzeichnis
Erst mal: Ich bin nicht besonders fit in Bat Programmierung also "Deutsch" mit mir reden, danke =)
Hallo zusammen =),
hoffe ihr könnt mir bei einem kleinen Problem helfen.
Und zwar möchte ich eine .bat erstellen die in dem Verzeichnis in dem sie liegt alle leeren Ordner und deren leere Unterordner löscht.
Zum Beispiel:
Hoffe ihr könnt mir da helfen =)
Vielen Dank schon mal!
Glg,
Shadow88
Hallo zusammen =),
hoffe ihr könnt mir bei einem kleinen Problem helfen.
Und zwar möchte ich eine .bat erstellen die in dem Verzeichnis in dem sie liegt alle leeren Ordner und deren leere Unterordner löscht.
Zum Beispiel:
C:/Aufraeumarbeiten (variables Stammverzeichnis, kann auch anderen Namen haben)
C:/Aufraeumarbeiten/aufrauemen.bat
-> C:/Aufraeumarbeiten/Ordner_leer #
-> C:/Aufraeumarbeiten/Ordner_leer/Ordner_voll #
-> C:/Aufraeumarbeiten/Ordner_leer/Ordner_leer # Werden von batch nach leeren Ordnern durchsucht und diese sollen
-> C:/Aufraeumarbeiten/Ordner_voll/Ordner_voll # gelöscht werden. Volle Ordner bleiben bestehend.
-> C:/Aufraeumarbeiten/Ordner_voll/Ordner_leer #
-> C:/Aufraeumarbeiten/Ordner_voll #
Hoffe ihr könnt mir da helfen =)
Vielen Dank schon mal!
Glg,
Shadow88
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 84569
Url: https://administrator.de/forum/batch-zum-entfernen-leerer-ordner-in-einem-verzeichnis-84569.html
Ausgedruckt am: 17.04.2025 um 02:04 Uhr
2 Kommentare
Neuester Kommentar
Hallo Shadow88 und willkommen im Forum!
Eigentlich nehme ich für solche Zwecke lieber ein VBScript - aber das lässt sich auch in einen Batch einbetten:
Diese Batchdatei erzeugt ein temporäres VBScript ("DelEmptyFolders.vbs") im Temp-Verzeichnis (der komplette Pfad zum Script wird in der Variablen %D% gespeichert), ruft dieses auf ("cscript //nologo %D%") und übergibt als Ausgangsverzeichnis den Pfad zum Ordner, in dem die Batchdatei selbst liegt - die Schreibweise
steht für "Laufwerk (drive) und Pfad (path) der Batchdatei" (diese liest ihren eigenen Pfad und Dateinamen aus dem Parameter %0). Mit den umgebenden Anführungszeichen wird für den Fall vorgesorgt, dass der Pfad Leerzeichen enthalten sollte.
Das VBScript beginnt dann im Ausgangsverzeichnis damit, rekursiv die gesamte Unterverzeichnisstruktur zu durchforsten und stellt für jedes Unterverzeichnis fest, ob die Anzahl der darin enthaltenen Dateien und weiteren Unterverzeichnisse insgesamt 0 ist - in diesem Fall ist dieses Verzeichnis leer und kann gelöscht werden.
Da ich das VBScript in den drei "echo"-Zeilen doch ein wenig komprimiert hinterlegt habe, hier das Ganze nochmals in etwas aufgelockerter Schreibweise:
Grüße
bastla
Eigentlich nehme ich für solche Zwecke lieber ein VBScript - aber das lässt sich auch in einen Batch einbetten:
@echo off & setlocal
set D=%temp%\DelEmptyFolders.vbs
echo DeleteEmptyFolders(CreateObject("Scripting.FileSystemObject").GetFolder(WScript.Arguments(0)))>%D%
echo Sub DeleteEmptyFolders(Ordner):For Each Unter In Ordner.SubFolders:DeleteEmptyFolders(Unter)>>%D%
echo If (Unter.SubFolders.Count+Unter.Files.Count)=0 Then:Unter.Delete:End If:Next:End Sub>>%D%
cscript //nologo %D% "%~dp0"
del %D%
"%~dp0"
Das VBScript beginnt dann im Ausgangsverzeichnis damit, rekursiv die gesamte Unterverzeichnisstruktur zu durchforsten und stellt für jedes Unterverzeichnis fest, ob die Anzahl der darin enthaltenen Dateien und weiteren Unterverzeichnisse insgesamt 0 ist - in diesem Fall ist dieses Verzeichnis leer und kann gelöscht werden.
Da ich das VBScript in den drei "echo"-Zeilen doch ein wenig komprimiert hinterlegt habe, hier das Ganze nochmals in etwas aufgelockerter Schreibweise:
DeleteEmptyFolders(CreateObject("Scripting.FileSystemObject"). _
GetFolder(WScript.Arguments(0)))
Sub DeleteEmptyFolders(Ordner)
For Each Unter In Ordner.SubFolders
DeleteEmptyFolders(Unter)
If (Unter.SubFolders.Count+Unter.Files.Count) = 0 Then
Unter.Delete
End If
Next
End Sub
Grüße
bastla