Batch zum loeschen leerer Ordner
Hallo Zusammen,
habe vom netten Bastla einen Batch Code gefunden. Diese soll aber nur dann leere Ordner und Unterodner löschen, wenn sich in keinem der Ordner eine Datei befindet.
Also:
Basisordner 1
Unterordner 1
Unterordner 2 --> Ordner 1 wird komplett gelöscht, da auch keine Datei in den Unterordnern ist
Unterordner 3
Basisordner 2
Unterordner 1
(Datei vorhanden)
Unterordner 2
(Keine Datei vorhanden) --> Ordner 2 und deren Unterordner (auch wenn einige leer sind) werden "nicht" gelöscht, da in
einem der Unterordner eine Datei vorhanden ist
Unterordner 3
(Keine Datei vorhanden)
Basisordner 3
Unterordner 1
Unterordner 2 --> Ordner 3 wird komplett gelöscht, da auch keine Datei in den Unterordnern ist
Unterordner 3
usw.
Die Ordner haben die gleiche Struktur.
Anbei der Code von Bastla, der etwas modifiziert werden müsste.
@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%
Ich hoffe ihr könnt mir helfen.
Gruß
fresh-m
habe vom netten Bastla einen Batch Code gefunden. Diese soll aber nur dann leere Ordner und Unterodner löschen, wenn sich in keinem der Ordner eine Datei befindet.
Also:
Basisordner 1
Unterordner 1
Unterordner 2 --> Ordner 1 wird komplett gelöscht, da auch keine Datei in den Unterordnern ist
Unterordner 3
Basisordner 2
Unterordner 1
(Datei vorhanden)
Unterordner 2
(Keine Datei vorhanden) --> Ordner 2 und deren Unterordner (auch wenn einige leer sind) werden "nicht" gelöscht, da in
einem der Unterordner eine Datei vorhanden ist
Unterordner 3
(Keine Datei vorhanden)
Basisordner 3
Unterordner 1
Unterordner 2 --> Ordner 3 wird komplett gelöscht, da auch keine Datei in den Unterordnern ist
Unterordner 3
usw.
Die Ordner haben die gleiche Struktur.
Anbei der Code von Bastla, der etwas modifiziert werden müsste.
@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%
Ich hoffe ihr könnt mir helfen.
Gruß
fresh-m
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 189208
Url: https://administrator.de/forum/batch-zum-loeschen-leerer-ordner-189208.html
Ausgedruckt am: 05.04.2025 um 19:04 Uhr
8 Kommentare
Neuester Kommentar
Hallo fresh-m,
Ich will nur mal kurz anmerken, dass das keine Batch richtige ist.
Das ist eine Batch die ein VBS Skript schreibt, was dan die aufgabe löst und danach wieder gelöscht wird.
Wiso eigentlich so umständlich? Mach doch gleich eine VBS Datei.
Da ich mich mit VBS leider nicht auskenne kan ich nicht leider nicht Helfen, dachte ja auch es sei ein Batch Problem...
Grüße
Darkprodukt
Ich will nur mal kurz anmerken, dass das keine Batch richtige ist.
Das ist eine Batch die ein VBS Skript schreibt, was dan die aufgabe löst und danach wieder gelöscht wird.
Wiso eigentlich so umständlich? Mach doch gleich eine VBS Datei.
Da ich mich mit VBS leider nicht auskenne kan ich nicht leider nicht Helfen, dachte ja auch es sei ein Batch Problem...
Grüße
Darkprodukt
moin freshm,
Dazu musst Du aber sagen ab welcher Tiefe gelöscht werden soll:
Gruß Phil
Dazu musst Du aber sagen ab welcher Tiefe gelöscht werden soll:
@echo off
setlocal
set "Wurzel=D:\"
rem "Ordner\Unterordner\UnterUnterOrdner" entspricht UnterUnterOrdner=3
set /a loescheAbBasisInTiefe = 3
set /a end = loescheAbBasisInTiefe
pushD "%Wurzel%"
:Sub
if %loescheAbBasisInTiefe% gtr 0 for /d %%i in (*) do (set /a loescheAbBasisInTiefe-=1
pushD "%%~i"
set "Del="
call :sub
popD
if defined Del @echo rd /s /q "%%~i"
set /a loescheAbBasisInTiefe+=1
)
if %loescheAbBasisInTiefe% equ %end% popD
if %loescheAbBasisInTiefe% gtr 0 exit /b
dir /s /b /a-d |find /v "" <nul || set "Del=1"
exit /b
Gruß Phil
Hallo fresh-m!
Wenn ich das richtig interpretiere, geht es nicht darum, ev leere Unter-/UnterUnterordner zu löschen, sondern es soll für jeden Basisordner nur ein "alles oder nichts" geben: Löschen des Basisordners, wenn es darunter keine einzige Datei gibt, oder die gesamte Ordnerstruktur behalten, wenn auch nur eine einzige Datei existiert - wenn ja, dann ginge das einfacher (zum Testen direkt in CMD, daher jeweils nur "
Natürlich kannst Du "D:\" entsprechend anpassen, sodass auf einer tieferen Ebene begonnen wird - vor dem
So wie im Vorschlag von PH ist auch hier ein "Sicherheits-
Grüße
bastla
Wenn ich das richtig interpretiere, geht es nicht darum, ev leere Unter-/UnterUnterordner zu löschen, sondern es soll für jeden Basisordner nur ein "alles oder nichts" geben: Löschen des Basisordners, wenn es darunter keine einzige Datei gibt, oder die gesamte Ordnerstruktur behalten, wenn auch nur eine einzige Datei existiert - wenn ja, dann ginge das einfacher (zum Testen direkt in CMD, daher jeweils nur "
%i
" anstatt wie im Batch "%%i
":for /d %i in ("D:\*") do @dir /s/b/a-d "%i">nul 2>nul||echo rd /s /q "%i"
*
muss aber immer ein \
stehen.So wie im Vorschlag von PH ist auch hier ein "Sicherheits-
echo
" eingebaut, damit Du gefahrlos testen kannst, da so die Löschbefehle nur angezeigt, aber nicht ausgeführt werden ...Grüße
bastla
Hallo bastla, ich schon wieder 
Ich habe auch den o.g. Code leicht modfiziert von Dir genutzt, um Ordner zu löschen, die keine Datei mit einer bestimmten Endung enthalten. Das funktioniert aber leider nur, wenn die Datei genau den gleichen Namen hat wie der Ordner. Was müsste ich denn ändern, um beliebige Dateinamen mit einer bestimmten Endung zu berückstigen?
Mein aktueller Code:
Ich habe auch den o.g. Code leicht modfiziert von Dir genutzt, um Ordner zu löschen, die keine Datei mit einer bestimmten Endung enthalten. Das funktioniert aber leider nur, wenn die Datei genau den gleichen Namen hat wie der Ordner. Was müsste ich denn ändern, um beliebige Dateinamen mit einer bestimmten Endung zu berückstigen?
Mein aktueller Code:
Hallo hackyli!
Eine Kleinigkeit wäre zu ändern (ungetestet):
Grüße
bastla
P.S.: Wie "Code"-Formatierung vorzunehmen ist, steht hier ...
Eine Kleinigkeit wäre zu ändern (ungetestet):
for /d %%i in ("E:\Bilder\*") do dir /s/b/a-d "%%i\*.jpg" || rd /s /q "%%i"
bastla
P.S.: Wie "Code"-Formatierung vorzunehmen ist, steht hier ...