Unterordner mit einem bestimmten Namen aus allen Unterordnern löschen?


7

Ich weiß, wie man einen einzelnen Unterordner oder mehrere per Maske löscht:

rmdir / s / q C: \ Somedir \ DirToDelete

oder

rmdir / s / q C: \ Somedir \ DirsToDelete *

Ich möchte jedoch alle Unterordner, beispielsweise mit dem Namen DeleteMe, aus allen Unterordnern in C: \ Somedir löschen.

Ideen?

Antworten:


7

Zuerst möchten Sie alle Verzeichnisse auflisten, die Sie entfernen möchten. Verwenden Sie dies dann, um alle zu löschen. Hier ist ein kurzes und schmutziges Beispiel mit dem, was Sie dort eingegeben haben.

for /f "usebackq" %%a in (`"dir C:\Somedir /ad/b/s DirsToDelete"`) do rmdir "%%a"

Bitte testen Sie dies, bevor Sie es für Ihre Umgebung starten. Normalerweise würde ich das rmdir durch echo ersetzen, um sicherzustellen, dass es funktioniert.


2
rmdirentfernt nur leere Verzeichnisse, daher ist dies in einigen Fällen rmdir /s /q "%%a"möglicherweise besser geeignet.
Steve Chambers

1
%% a ist für die Batch-Datei, verwenden Sie% a für eine Befehlszeile. Für mich ist die funktionierende Lösung (einschließlich Unterstützung für Speicherplatz im Verzeichnisnamen):for /f "usebackq delims=^=^" %a in (`"dir DirsToDelete /ad/b/s"`) do rmdir /s /q "%a"
Matt Roy

7

Ein anderer Weg ist (nur PowerShell)

 Remove-Item -path e:\path\*\path\*\* -Filter *DeleteMe* -WhatIf

Entfernen Sie alle rekursiven DeleteMe- Verzeichnisse im letzten "Sternchen" -Pfad.

-WhatIf = nur anzeigen, welche Verzeichnisse entfernt werden, nein, mach es - schön zur Überprüfung, bevor andere Daten zerstört werden :)

UPDATE 1 Nach einiger Arbeit ... ist dieses Update besser ... Zeile vor kann nur leere Ordner löschen. Dies kann Ordner mit Inhalten löschen:

get-childitem -path E:\path\*\path\*\* -recurse -filter *DeleteMe* | remove-item -whatif -force -recurse

2
Ich bin mir ziemlich sicher, dass das OP cmd / Batch-kompatible Befehle wollte ... Sie sollten zumindest erwähnen, dass dies PowerShell ist.
Chris S

Richtig, Hinweis hinzugefügt
Pavel

1
+1, und das OP sollte erwähnen, dass er ein Batch-Skript verwenden wollte, da Powershell heutzutage definitiv als Windows-Befehlszeile zählt.
MDMoore313

Ich musste '-recurse' hinzufügen, damit dies so funktioniert: get-childitem <strong> -recurse </ strong> `-path C: \ dev * -filter target | remove-item -whatif -force -recurse`
Darrin

0
  1. Erstellen Sie eine Bat-Datei, aktualisieren Sie sie und fügen Sie den folgenden Code ein

FÜR / d / r. %% d IN ("Ihr zu löschender Ordnername") DO @IF EXIST "%% d" rd / s / q "%% d"

  1. Kopieren Sie diese Bat-Datei in Ihren übergeordneten Ordner (kann auch C: oder D: sein).
  2. Starte es
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.