Batch Script zum Löschen leerer Ordner

Dabei seit
Sep. 2008
Beiträge
2.558
#1
servus,
hab heute ne ganze weile an nem script geschrieben, das mir alle leeren ordner unterhalb eines angegebenen verzeichnisses löscht.
hintergrund war, dass in meinem musikordner viele unterordner mit covern und unnützem zeug waren.
diese für mich unnötigen dateien habe ich einfach mit der windowssuche (*.jpg etc.) gelöscht.
leider blieben aber nun hunderte von leeren ordnern übrig.
alle einzeln zu löschen hätte ewigkeiten gedauert. also ein script geschrieben:

@echo off


rem ### Pfad, unter dem alle leeren Ordner gloescht werden sollen wird gesetzt ###

set /p pfad=Bitte den gewuenschten Pfad angeben:

echo Es wurde %pfad% als Pfad angegeben.

echo Starte Loeschvorgang von leeren Ordnern in %pfad%.


rem ### Temporaeres Verzeichnis c:\temp\ wird erstellt, falls es nicht schon existiert. ###

if not exist c:\temp\ md c:\temp\


rem ### Falls noch die Datei c:\temp\tmp.txt existiert, so wird sie geloescht. ###

if exist c:\temp\tmp.txt del /F /Q c:\temp\tmp.txt


rem ### Schreibe alle Ordnerpfade in c:\temp\tmp.txt. ###

dir /AD /b /s %pfad% >> c:\temp\tmp.txt


rem ### Loesche alle leeren Ordner. ###

FOR /F "delims=" %%i IN (c:\temp\tmp.txt) DO rd "%%i"

echo Es wurde alle leeren Ordner geloescht!


rem ### Loesche die temporaere Datei c:\temp\tmp.txt und ggf. den leeren Ordner c:\temp\ ###

if exist c:\temp\tmp.txt del /F /Q c:\temp\tmp.txt

if exist c:\temp\ rd c:\temp\


pause

da ich alles kommentiert habe sollte der code selbsterklärend sein. ;)

das ganze einfach in ne neue textdatei kopieren und als blablabla.cmd abspeichern.

vielleicht kann ja jemand was damit anfangen, der ein ähnliches problem hat! ^^

viel spaß damit!
 

sp33d

Commander
Ersteller dieses Themas
Dabei seit
Sep. 2008
Beiträge
2.558
#3
oh, mist...
zu deiner zeile: das funktioniert so aber nur, wenn man es in der console eingibt, nicht, wenn man es als batch-datei verwendet.
zudem darf bei "deiner" zeile kein leerzeichen im dateinamen vorkommen. ;)
aaber im prinzip hast du recht. macht "fast" das gleiche... aber eben nur fast! ^^
 
Dabei seit
Mai 2006
Beiträge
4.136
#4
In der Batch wird %I anders interpretiert. Beim Einsatz in einer Batch daher einfach %%I verwenden. Dann gehts wieder.

Aber wer verwendet schon Batch? Jedes mal neu tippen heisst die Devise. Das übt ja auch ;-)
 

sp33d

Commander
Ersteller dieses Themas
Dabei seit
Sep. 2008
Beiträge
2.558
#5
ja, richtig. in der console ist %i das selbe wie %%i in einer batchdatei.
und genau damit ich es NICHT jedes mal neu tippen muss hab ich mir n script geschrieben. ^^
aber da hat wohl jeder seine eigenen präferenzen. ;)
nur für mich hätte ich ja auch nicht den kram mit den if-abfragen und der variable gemacht usw.
aber ich dachte, vielleicht kann das ja mal noch jemand gebrauchen.
und dann ist das wesentlich komfortabler, wenn man einfach den pfad angeben kann.
 
Dabei seit
Jan. 2016
Beiträge
2
#6
Guten Tag und allen ein gutes neues Jahr 2016.

Ich stiess auf dieses Skript über Google und könnte es gut gebrauchen.
Es funktioniert auch einwandfrei - ausgenommen allerdings, dass die leeren Ordner
nicht wirklich gelöscht werden.

Fehlermeldung (wie ich mit einigen eingefügten ECHOs und PAUSEn herausfand)
"Das Verzeichnis ist nicht leer".
Ist es in vielen Fällen aber doch!

Wo kann der Fehler liegen?
(BS ist Win 7 Pro auf dem letzten Stand. Es handelt sich um eine externe NTFS-Platte mit 2 TB)
 
Dabei seit
Feb. 2008
Beiträge
2.609
#7
Hallo Skeptiker.
Sind in den betroffenen Verzeichnissen evtl. versteckte Dateien oder Systemdateien vorhanden? Einfach im Explorer einblenden und nachschauen oder mit "dir /A:H" bzw. "dir /A:S" in cmd anzeigen lassen.
 
Dabei seit
Jan. 2016
Beiträge
2
#8
DANKE! Zu blöd - da hätte ich auch selber drauf kommen können: Die thumbs.db war überall drin. Jetzt hab ich vor das eigentliche Skript ein "del thumbs.db /s" über die ganze Platte gesetzt, und jetzt läuft es korrekt.
Für die Zukunft hänge ich das gleich hinter den Sicherungs-Kopierlauf. ("exclude" hab' ich auch mal hinbekommen - fand es aber umständlich und hab' schon wieder vergessen, wie es funktioniert. So einfach, wie es nach der Hilfe (/?) aussieht, jedenfalls nicht.
 

kneedeep

Cadet 4th Year
Dabei seit
Feb. 2010
Beiträge
67
#9
Hallo Leute,

ich hoffe ihr könnt mir helfen. Wahrscheinlich sehe ich den Wald vor lauter Bäumen nicht mehr. Ich möchte die Zeile in eine Batch-Datei einbauen. Ich ziehe mir vorher per Robocopy nur bestimmte Dateitypen aus einem Ordner mit vielen verschachtelten Unterordnern. Das Problem ist, dass diese auch Leerzeichen enthalten. Ich vermute, dass deswegen das Batch nicht läuft. Meine Zeile sieht folgendermaßen aus:

for /f %%i in ('dir /AD /b /s "d:\Eigene Dateien\ordner 1\unterordner"') do rd %%i

Die Ausgabe ist:

Das System kann die angegebene Datei nicht finden.
Das System kann die angegebene Datei nicht finden.
Das System kann die angegebene Datei nicht finden.
usw.

Ich hoffe ihr habt eine Idee...
 
Dabei seit
Juni 2010
Beiträge
185
#12
Ich hatte das gepostet ohne das auszuprobieren. Das Problem ist, dass in der FOR-Schleife standardmäßig ein Leerzeichen als Tokentrenner interpretiert wird. Um der FOR-Schleife zu sagen, sie soll ein anderes Zeichen benutzen, verwendet man den Parameter "delims". Geschickterweise setzt man dort ein Zeichen ein, das in einem Datei- bzw. Ordnernamen nicht vorkommen darf, z.B.: ein Fragezeichen. Somit lautet der vollständige Befehl dann:

for /f "delims=?" %%i in ('dir /AD /b /s "d:\Eigene Dateien\ordner 1\unterordner"') do rd "%%i"
 
Top