Was ist jemals mit Deltree passiert und was ist sein Ersatz?

80

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

deltreeexistiert nicht mehr, delschien aber nicht die Fähigkeit zu erben, einen Baum zu löschen. del /slöscht Dateien, aber keine Ordner.

Wie können Sie einfach (dh mit einem Befehl) einen Baum aus einer Batchdatei löschen?

David Koelle
quelle
2
deltree wurde in Version 5.0 eingeführt (ich erinnere mich noch an die Freude, es benutzen zu können) - Mann, ich fühle mich alt.
Mark D

Antworten:

90

Wie bereits erwähnt, verfügt der rdBefehl über den /sSchalter zum rekursiven Entfernen von Unterverzeichnissen. Sie können es mit dem /qSchalter kombinieren , um ein Unterverzeichnis (und seinen Inhalt) ohne Aufforderung zwangsweise zu löschen

rd /s /q c:\foobar

Was jeder fehlt , ist , dass rdist nicht ein exakter Ersatz für deltreeso scheinbar ( fast ) jede Seite von googeln zurück für windows deltreeSie würde glauben lassen . Der deltreeBefehl funktionierte sowohl für Verzeichnisse als auch für Dateien und war somit ein einziger praktischer Allzweck-Löschbefehl. Das heißt, beide der folgenden sind gültig:

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

Funktioniert jedoch rd(nicht überraschend) nur für Verzeichnisse . Als solches ist nur der erste dieser Befehle gültig, während der zweite Fehler gibt und die Datei nicht gelöscht lässt:

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

Außerdem delfunktioniert der Befehl nur für Dateien, 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 möglich wäre deltree. Die Verwendung von rdund delindividuell 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 deltreeBefehl 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 delund aufruft rd. 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 beide auf rdund delübergibt die Argumente und leitet die Ausgabe um nul, um den Fehler zu vermeiden, den einer von ihnen ausnahmslos ausgibt.

Möglicherweise möchten Sie das Verhalten anpassen, um Parameter anzupassen oder zu vereinfachen oder 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 Finden eines Tools eine echte Übung beim Erstellen von Suchanfragen ist.

Synetech
quelle
2
@TobyAllen, "rm"? Meinten Sie rd ? Wenn ja, müssen Sie den Hilfetext erneut lesen. Es heißt, Entfernt alle Verzeichnisse und Dateien im angegebenen Verzeichnis zusätzlich zum Verzeichnis selbst. Wird zum Entfernen eines Verzeichnisbaums verwendet. Wie gesagt, es werden keine Dateien gelöscht. Wenn Sie es so verwenden rd /s foobar.txt:, werden Sie aufgefordert, wenn Sie sicher sind, und wenn Sie Ja sagen (oder den /qSchalter verwenden), wird der Fehler The directory name is invalid.
ausgegeben
Sie können tatsächlich alles unter einem Verzeichnis (einschließlich seiner Unterverzeichnisse) mit entfernen. Es RMDIR /Sist also tatsächlich falsch, Dateien und Ordner auf einmal zu löschen.
Vapcguy
@vapcguy gilt rd /snur für das Verzeichnis, nicht für die darin enthaltenen Dateien . Um die darin enthaltenen Dateien zu löschen, müssen Sie sie rdim Verzeichnis selbst verwenden. Sie können beispielsweise nicht sagen rd c:\target\foobar.txt, dass Sie verwenden müssen rd /s c:\target, aber Sie möchten möglicherweise nicht das Verzeichnis selbst löschen, sondern nur dessen Inhalt. deltreekönnte das tun, kann aber rd /snicht, rd /slöscht auch das Verzeichnis selbst.
Synetech
Beachten Sie, dass ich sagte RMDIR /S- nicht rd /s. Aber auch rdwenn das Verzeichnis nicht mehr vorhanden ist, wie werden die Dateien nicht entfernt? Selbst wenn dies nicht der Fall wäre, sind die Dateien effektiv verwaist und sollten vom System als Müll gesammelt werden. Und selbst wenn dies nicht geschehen ist, ist dies sicherlich der Fall, wenn Sie das Verzeichnis neu erstellen. Sie erhalten auf magische Weise keine Liste Ihrer Dateien erneut. Zeiger werden im Wesentlichen entfernt. Wollen Sie damit sagen, dass Sie diesen Speicherplatz einfach nie zurückbekommen, weil Sie diese Dateien bei Verwendung nie wieder löschen können rd /s? Ich bin mir nicht sicher, ob ich das glauben würde - das wäre ein schrecklicher Fehler. Punkt ist, Dateien & Verzeichnis zu löschen.
vapcguy
Wenn Sie ein Verzeichnis in Ihrem Ordner „Dokumente“ als „Test“ zu erstellen, ein Testtextdokument erstellen in Windows gibt, schließen Sie das Fenster Explorer auf eine Befehlszeile gehen, cd Documents, rd /s test, Ihr Verzeichnis und die Textdatei werden gelöscht. rmdir /s testfunktioniert auch. Du versuchst NIE zu benutzen rd /s C:\Users\me\Documents\test\test.txt- das wäre absolut dumm. Sie KÖNNEN und SOLLTEN den Befehl für das Verzeichnis verwenden, nur nicht für den Dateinamen. Durch Entfernen des Verzeichnisses können Sie jedoch die Dateien entfernen.
vapcguy
43

Es 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:

Jeremiah
quelle
3
"RMDIR / S / Q. \" Löscht effektiv das aktuelle Verzeichnis und alles darunter. Ja, es wird beanstandet, dass das aktuelle Verzeichnis nicht gelöscht werden kann, was nützlich sein kann. Stellen Sie einfach sicher, dass Sie sich beim Ausführen im richtigen Verzeichnis befinden! :)
Mmm
9

Ich fühlte mich nostalgisch und schrieb meine eigene deltree.exe. Es funktioniert sowohl mit Verzeichnissen als auch mit 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 braucht Platzhalter und Sie können es wie Unix rm verwenden:

deltree -rf *
Raychi
quelle
5
rmdir /s /q directory
Jon Skeet
quelle
5

Heutzutage können Sie Powershell verwenden, um dieselbe Aufgabe zu erledigen:

powershell -Command "Remove-Item 'PathToMyDirectory\*' -Recurse -Force"
Rosberg Linhares
quelle
Leider ist PowerShell aufgebläht und langsam. : - \ Ich hasse es, wenn Unternehmen versuchen, Benutzer zu zwingen, auf ihren neuesten Müll zu "upgraden". 😒
Synetech
4
$ help rd
Entfernt (löscht) ein Verzeichnis.

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

    / S Entfernt alle Verzeichnisse und Dateien im angegebenen Verzeichnis
            zusätzlich zum Verzeichnis selbst. Wird zum Entfernen eines Verzeichnisses verwendet
            Baum.

    / Q Ruhiger Modus, fragen Sie nicht, ob es in Ordnung ist, einen Verzeichnisbaum mit / S zu entfernen
Ferruccio
quelle
2

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.

Durch Eingabe dieses "RD /?" In cmd ohne doppelte Qoutes erhalten Sie genau das, was Sie wollen.

Sohail xIN3N
quelle
0

um ein Verzeichnis und seinen gesamten Inhalt rekursiv zu löschen

rd /s MY_DOOMED_DIR
Gregg
quelle
0

Benutze das:

cd (your directory here)
del *.* /f /s /q
Der Programmierer7018
quelle
2
Könnten Sie bitte eine kurze Erklärung für die Flaggen hinzufügen? Das wird diese Antwort noch wertvoller machen. Vielen Dank.
Rsjaffe
Dies wurde bereits in der akzeptierten Antwort erwähnt .
Melebius
0

Löschen Sie alle Dateien und Unterverzeichnisse

cd /d Directory && rd /s /q .\
v_b
quelle
Ihre Antwort scheint ein Duplikat anderer Antworten zu sein (einige sind 10 Jahre alt). Ich kann keine weiteren oder besseren Erklärungen oder andere Vorteile sehen
jeb
1
@jeb, eigentlich ist es nicht. Es ist etwas anders, und dieser kleine Unterschied ist entscheidend und macht es überlegen. 👍😉
Synetech