shadow88
Goto Top

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:


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

Content-Key: 84569

Url: https://administrator.de/contentid/84569

Printed on: April 26, 2024 at 20:04 o'clock

Member: bastla
bastla Apr 02, 2008 at 21:13:40 (UTC)
Goto Top
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:
@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%
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
"%~dp0"  
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:
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
Member: Shadow88
Shadow88 Apr 03, 2008 at 07:22:59 (UTC)
Goto Top
Boahh.... bin wirklich beeindruckt =)

Vielen Herzlichen Dank!

Glg,

Shadow88