Batch: Dateien/Unterordner/Ordner löschen/leeren

Batch Löschtaktiken

Nur Unterordner eines Zielordners löschen:

for /D %%a in ("zielordner\*.*") do rd /q /s "%%a"

Nur Dateien eines Zielordners löschen, Unterordner (+Inhalt) nicht löschen:

del zielordner\*.* /q

Gesamten Inhalt eines Ordners löschen:
Entweder löscht man den gesamten Ordner und erstellt ihn leer neu:

rd zielordner /s /q && md zielordner

oder man leer den Inhalt ohne den Ordner selbst anzufassen:

del zielordner /s /f /q
for /D %%a in ("zielordner\*.*") do rd /q /s "%%a"
Auch interessant:  Windows DPI-Scaling für bestimmte Programme deaktivieren (2020)

8 Kommentare

  1. Die Befehlsfolge:
    del zielordner /s /f /q
    for /D %%a in („zielordner\*.*“) do rd /q /s „%%a“
    löscht nicht alle Ordner/Unterorder, wenn ich vorher in einem der Unterordner z.B. per Explorer etwa angesehen, bzw. bearbeitet habe.
    Dann muss ich den Befehl mehrfach aufrufen, damit auch wirklich alles gelöscht wird.
    Wie kann man dies mit nur einem Befehl bewerkstelligen?

    1. Hallo KVISRef,
      das ist soweit korrekt: Wenn ein Prozess/Handler einen Ordner oder eine Datei belegt, kann diese(r) womöglich nicht gelöscht werden. Das kommt aber auf den zugreifenden Prozess zu, manche sind da weniger restriktiv. Beispielsweise löscht der erste Befehl del auch Dateien, die vom legacy Editor Notepad gerade geöffnet sind. Dagegen werden aber tatsächlich Ordner von der for ... rd Befehlskombi nicht gelöscht, wenn diese im Explorer geöffnet sind.
      Wie kann man das lösen? Man kann die Prozesse/Handler killen, die gerade blockieren, aber dazu müsste man diese kennen. Wenn es nur um im Explorer noch geöffnete Verzeichnisse geht, könnte man vorher die explorer.exe via taskkill beenden, dann die Befehle durchlaufen lassen und explorer.exe wieder starten.
      Damit werden aber keine anderen Dateiexplorer oder Programme beendet, die eventuell auch blockieren. In komplexeren Situationen, wenn die Lösung wirklich sichergestellt werden muss, würde ich auf Tools wie Unlocker, WhoLockMe oder LockHunter schauen, in der Hoffnung, dass eins davon per Kommandozeile bedient werden kann. Dann in Batch beim Löschen auf Fehler wie „Der Prozess kann nicht auf die Datei zugreifen“ achten, die Problemordner dann an das Tool übergeben, dort am besten direkt unlocken lassen und erneut löschen. Wenn es nicht unbedingt Batch sein muss, empfiehlt sich hier vermutlich auch Powershell, das könnte einfacher und kürzer werden.

  2. Bin nicht der große Progammierer aber bei mir wirft unter Win10 der Befehl
    del C:\Users\%USERNAME%\AppData\Local\Temp /s /f /q for /D %a in („C:\Users\%USERNAME%\AppData\Local\Temp\*.*“) do rd /q /s „%a“
    die Fehlermeldung: Ungültige Option – „D“ aus.

    1. Wenn Du den Job im User-Kontext laufen lässt, wäre auch %LOCALAPPDATA% eine gute Variable. Den Ordner würdest Du dann mit %LOCALAPPDATA%\Temp aufrufen. Das macht das Script übersichtlicher. Schau auch, dass der Befehl „For /D…“ auf einer separaten Zeile beginnt.

  3. Es ist nicht ganz klar wie dein Code jetzt konkret aussieht aber ich habe gerade erfolgreich folgenden Befehl bei mir getestet:
    for /D %a in („c:\Users\hannes.schurig\Videos\*.*“) do rd /q /s „%a“
    Der hat funktioniert. /D ist ein Parameter des /for Befehls und sorgt dafür, dass die Befehle in der For-Schleife nur auf Verzeichnisse ausgeführt werden.

  4. Hallo,

    gibt es eine Möglichkeit bestimmte, gleich lautende Ordner (z. B. .AppleDouble) zu löschen in der gesamten Ordnerhierarchie, ohne andere Ordner/Dateien zu löschen (Win10)? Die zu löschenden Ordner sind alle leer, tauchen aber auf allen Ebenen der Ordnerhierarchie auf; es sind Überreste einer macintoshinternen Indizierung.
    Vielen Dank für jede Hilfe!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.