web-dev-qa-db-de.com

Was ist mit deltree passiert und was ersetzt es?

In früheren Versionen von MS-DOS - ich möchte Version 7 sagen, aber ich könnte mich irren - gab es einen deltree-Befehl, der alle Unterverzeichnisse und Dateien aus einem bestimmten Pfad rekursiv löschte. 

deltree existiert nicht mehr, aber del schien nicht die Fähigkeit zu besitzen, einen Baum zu löschen. del /s löscht Dateien, aber keine Ordner.

Wie kann man leicht (d. H. Mit einem Befehl) einen Baum aus einer Batchdatei löschen?

69
David Koelle

Wie bereits erwähnt, hat der Befehl rd den Schalter /s, um Unterverzeichnisse rekursiv zu entfernen. Sie können es mit dem Schalter /q kombinieren, um ein Unterverzeichnis (und dessen Inhalt) ohne entsprechende Aufforderung zu löschen

rd /s /q c:\foobar

Was alle vermissen, ist, dass rd kein genauer Ersatz für deltree ist, wie anscheinend ( fast ) jede Seite, die von zurückgegeben wurde Googeln für windows deltree würde Sie glauben lassen. Der Befehl deltree funktionierte sowohl für Verzeichnisse als auch für Dateien und machte ihn zu einem einzigen praktischen Allzweck-Löschbefehl. Das heißt, beide der folgenden sind gültig:

deltree /y c:\foobar
deltree /y c:\baz.txt

rd (nicht überraschend) funktioniert jedoch nur für Verzeichnisse . Daher ist nur der erste dieser Befehle gültig, während der zweite einen Fehler ausgibt und die Datei nicht gelöscht wird:

rd /s /q c:\foobar
rd /s /q c:\baz.txt

Darüber hinaus funktioniert der Befehl del nur für Dateien und nicht für Verzeichnisse. Daher ist nur der zweite Befehl gültig, während der erste einen Fehler ausgibt:

del /f /q c:\foobar
del /f /q c:\baz.txt

Es gibt keine integrierte Möglichkeit, Dateien und Verzeichnisse zu löschen, wie dies mit deltree möglich ist. Die individuelle Verwendung von rd und del ist bestenfalls unpraktisch, da unterschieden werden muss, ob ein Dateisystemobjekt (Datei-/Ordnername) eine Datei oder ein Verzeichnis ist, was nicht immer möglich oder praktisch ist.

Sie können den Befehl deltree von einem früheren Betriebssystem kopieren, er funktioniert jedoch nur unter 32-Bit-Versionen von Windows, da es sich um einen 16-Bit-DOS-Befehl handelt (auch unter Windows 9x).

Eine andere Möglichkeit besteht darin, eine Batch-Datei zu erstellen, die sowohl del als auch rd aufruft. etwas wie das:

::deltree.bat

@echo off
rd  %* 2> nul
del %* 2> nul

Sie würden es so nennen:

deltree.bat /s /q /f c:\foobar
deltree.bat /s /q /f c:\baz.txt

Dies ruft sowohl rd als auch del auf, übergibt die Argumente und leitet die Ausgabe an nul um, um den Fehler zu vermeiden, den einer von ihnen immer ausgibt.

Möglicherweise möchten Sie das Verhalten anpassen, um Parameter anzupassen oder zu vereinfachen oder um Fehlermeldungen zuzulassen. Trotzdem ist es nicht ideal und kein direkter Ersatz für deltree.

Eine Alternative besteht darin, ein Tool eines Drittanbieters zu erwerben, obwohl das Auffinden eines Tools eine echte Übung beim Erstellen von Suchanfragen ist.

83
Synetech

Sie wurde durch die Befehle RMDIR oder RD ersetzt

Löschen Sie alle Unterverzeichnisse mit/S

Verwenden Sie es leise mit dem/Q

Beispiel:

RMDIR /S /Q Folder2Delete
RD /S /Q Folder2Delete

Dokumentation: 

41
Jeremiah

Ich fühlte mich nostalgisch und schrieb meine eigene deltree.exe. Es funktioniert mit Verzeichnissen und Dateien und verwendet SHFileOperation () für die Geschwindigkeit.

https://github.com/ai7/toolbox/tree/master/deltree

deltree v1.01 [Mar 27 2015, 16:31:02] (gcc 4.9.1)

Usage: deltree [options] <path> ...

Options:
  -y    yes, suppresses prompting for confirmation
  -s    silent, do not display any progress dialog
  -n    do nothing, simulate the operation
  -f    force, no prompting/silent (for rm compatibility)
  -r    ignored (for rm compatibility)

Delete directories and all the subdirectories and files in it.

Es nimmt Platzhalter und Sie können es wie Unix Rm verwenden:

deltree -rf *
6
raychi
rmdir /s /q directory
5
Jon Skeet

Heutzutage können Sie Powershell verwenden, um dieselbe Aufgabe auszuführen:

powershell -Command "Remove-Item 'PathToMyDirectory\*' -Recurse -Force"
4
$ help rd 
 Entfernt (löscht) ein Verzeichnis .

 RMDIR [/ S] [/ Q] [Laufwerk:] Pfad 
 RD [/ S] [/ Q] [Laufwerk:] Verzeichnis 

/S Entfernt alle Verzeichnisse und Dateien im angegebenen Verzeichnis 
 zusätzlich zum Verzeichnis selbst. Wird verwendet, um ein Verzeichnis zu entfernen 
 Baum.

/Q Stiller Modus. Fragen Sie nicht nach, ob Sie eine Verzeichnisstruktur mit /S.__ entfernen möchten.
4
Ferruccio

Tatsächlich führen RMDIR- und RD-Befehle in modernen Windows-Betriebssystemen die Befehle RD und Deltree von Win 98 in einem einzigen Befehl zusammen. Es ist ein interner Befehl, weshalb Sie keine RD.exe und RMDIR.exe finden.

Geben Sie dieses "RD /?" in cmd ohne doppelte qoutes erhalten sie genau das, was sie wollen.

2
Sohail xIN3N

Benutze das:

cd (your directory here)
del *.* /f /s /q
0

ein Verzeichnis und seinen gesamten Inhalt rekursiv löschen

rd /s MY_DOOMED_DIR
0
Gregg