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?

Kamarey
quelle

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.

Nixphoe
quelle
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
Pavel
quelle
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
Chris Phan
quelle