Co się stało z deltree i co jest jego zamiennikiem?

81

We wcześniejszych wersjach MS-DOS - chciałbym powiedzieć wersję 7, ale mogłem się mylić - było deltreepolecenie, które rekurencyjnie kasowało wszystkie podkatalogi i pliki z podanej ścieżki.

deltreejuż nie istnieje, ale delwydaje się , że nie odziedziczył możliwości usuwania drzewa. del /susuwa pliki, ale nie foldery.

Jak łatwo (czyli jednym poleceniem) usunąć drzewo z pliku wsadowego?

David Koelle
źródło
2
deltree zostało wprowadzone w wersji 5.0 (wciąż pamiętam radość z tego, że mogę go używać) - Człowieku, czuję się stary.
Mark D

Odpowiedzi:

90

Jak wspominali inni, rdpolecenie ma /sprzełącznik do rekurencyjnego usuwania podkatalogów. Możesz połączyć to z /qprzełącznikiem, aby wymusić usunięcie podkatalogu (i jego zawartości) bez monitowania o to

rd /s /q c:\foobar

Wszystkim brakuje to, że nierd jest to dokładny zamiennik dla pozornie ( prawie ) każdej strony zwróconej przez Google . Komenda pracował zarówno dla katalogów i plików , dzięki czemu pojedyncze polecenie usunięcie wygodne, uniwersalne. Oznacza to, że oba poniższe warunki są ważne:deltreewindows deltreedeltree

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

Jednak rd(nie jest to zaskakujące) działa tylko dla katalogów . W związku z tym tylko pierwsze z tych poleceń jest ważne, podczas gdy drugie podaje i błąd i pozostawia plik nieusunięty:

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

Co więcej, delpolecenie działa tylko dla plików, a nie katalogów, więc tylko drugie polecenie jest poprawne, podczas gdy pierwsze powoduje błąd:

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

Nie ma wbudowanego sposobu usuwania plików i katalogów, jak można by to zrobić deltree. Używanie rdi delindywidualnie jest w najlepszym razie niewygodne, ponieważ wymaga rozróżnienia, czy obiekt systemu plików (nazwa pliku / folderu) jest plikiem lub katalogiem, co nie zawsze jest możliwe lub praktyczne.

Możesz skopiować deltreepolecenie z poprzedniego systemu operacyjnego, jednak będzie działać tylko w 32-bitowych wersjach systemu Windows, ponieważ jest to 16-bitowe polecenie DOS (nawet w systemie Windows 9x).

Inną opcją jest utworzenie pliku wsadowego, który wywołuje zarówno deli rd; coś takiego:

::deltree.bat

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

Nazwałbyś to tak:

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

Powoduje to wywołanie obu rdi del, przekazanie argumentów i przekierowanie danych wyjściowych do, nulaby uniknąć błędu, który jeden z nich będzie niezmiennie emitował.

Prawdopodobnie będziesz chciał dostosować zachowanie, aby dostosować lub uprościć parametry lub zezwolić na komunikaty o błędach, ale mimo to nie jest to idealne rozwiązanie i nie zastępuje bezpośrednio deltree.

Alternatywą jest zdobycie narzędzia innej firmy, chociaż znalezienie takiego jest prawdziwym ćwiczeniem w tworzeniu zapytań wyszukiwania.

Synetech
źródło
2
@TobyAllen, „rm”? Czy chodziło Ci o rd ? Jeśli tak, musisz ponownie przeczytać tekst pomocy; mówi Usuwa wszystkie katalogi i pliki w określonym katalogu oprócz samego katalogu. Służy do usuwania drzewa katalogów. Jak powiedziałem, nie usuwa plików. Jeśli użyjesz go w ten sposób rd /s foobar.txt/qThe directory name is invalid.
:,
W rzeczywistości możesz usunąć wszystko z katalogu (w tym jego podkatalogów) za pomocą RMDIR /S, więc stwierdzenie, że nie ma możliwości usunięcia zarówno plików, jak i folderów za jednym zamachem, jest w rzeczywistości niepoprawne.
vapcguy
@vapcguy, rd /sdotyczy tylko katalogu, a nie plików w nim zawartych . Aby usunąć znajdujące się w nim pliki, musisz użyć rdsamego katalogu. Na przykład nie możesz powiedzieć rd c:\target\foobar.txt, że musiałbyś użyć rd /s c:\target, ale możesz nie chcieć usuwać samego katalogu, tylko jego zawartość. deltreemoże to zrobić, ale rd /snie może, rd /susuwa również sam katalog.
Synetech
Zauważ, że powiedziałem RMDIR /S- nie rd /s. Ale nawet rdjeśli katalog zniknie, w jaki sposób pliki nie zostaną usunięte? Nawet jeśli tak nie jest, pliki są skutecznie osierocone i powinny zostać usunięte przez system. A nawet jeśli tak się nie stanie, z pewnością tak się stanie, jeśli ponownie utworzysz katalog - ponownie nie otrzymasz magicznie listy swoich plików. Wskaźniki są zasadniczo usuwane. Więc mówisz, że nigdy nie odzyskasz tego miejsca, ponieważ nigdy nie będziesz w stanie usunąć tych plików, ponownie, jeśli używasz rd /s? Nie jestem pewien, czy bym w to uwierzył - to byłby straszny błąd. Chodzi o to, aby usunąć pliki & reż.
vapcguy
Jeśli utworzyć katalog w folderze „Documents” o nazwie „test”, należy utworzyć dokument tekstowy testowy istnieje w systemie Windows, a następnie zamknij okno Explorer, przejdź do linii poleceń cd Documents, rd /s testTwój katalog i plik tekstowy zostanie usunięty. rmdir /s testteż działa. NIGDY nie próbuj używać rd /s C:\Users\me\Documents\test\test.txt- to byłoby absolutnie głupie. Ale MOŻESZ i POWINIENEŚ użyć polecenia w katalogu, ale nie w nazwie pliku. Ale usuwając katalog, możesz usunąć pliki.
vapcguy
43

Zastąpiono go poleceniami: RMDIR lub RD

Usuń wszystkie podkatalogi za pomocą / S

Używaj go cicho z / Q

Przykład:

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

Dokumentacja:

Jeremiasz
źródło
3
„RMDIR / S / Q. \” Skutecznie usuwa bieżący katalog i wszystko, co się z nim znajduje. Tak, narzeka, że ​​nie może usunąć bieżącego katalogu, co może być przydatne. Po prostu upewnij się, że jesteś w odpowiednim katalogu podczas uruchamiania! :)
Mmm
9

Czując nostalgię, napisałem własny plik deltree.exe. Działa zarówno z katalogami, jak i plikami i używa SHFileOperation () do przyspieszenia.

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.

Wymaga symboli wieloznacznych i możesz go używać jak unix rm:

deltree -rf *
raychi
źródło
5
rmdir /s /q directory
Jon Skeet
źródło
5

Obecnie możesz użyć Powershell do wykonania tego samego zadania:

powershell -Command "Remove-Item 'PathToMyDirectory\*' -Recurse -Force"
Rosberg Linhares
źródło
Niestety PowerShell jest rozdęty i powolny. : - \ Nienawidzę, gdy firmy próbują zmusić użytkowników do "aktualizacji" do ich najnowszych śmieci. 😒
Synetech,
4
$ help rd
Usuwa (usuwa) katalog.

RMDIR [/ S] [/ Q] [dysk:] ścieżka
RD [/ S] [/ Q] [dysk:] ścieżka

    / S Usuwa wszystkie katalogi i pliki w określonym katalogu
            oprócz samego katalogu. Służy do usuwania katalogu
            drzewo.

    / Q Tryb cichy, nie pytaj, czy można usunąć drzewo katalogów za pomocą / S
Ferruccio
źródło
2

Właściwie polecenia RMDIR i RD w nowoczesnym systemie operacyjnym Windows łączą zarówno polecenia RD, jak i Deltree z Win 98 w jednym poleceniu. Jest to polecenie wewnętrzne, dlatego nie znajdziesz żadnego RD.exe ani RMDIR.exe.

Wpisując to „RD /?” w cmd bez podwójnych zapytań otrzymasz dokładnie to, czego chcesz.

Sohail xIN3N
źródło
0

rekurencyjne usuwanie katalogu i całej jego zawartości

rd /s MY_DOOMED_DIR
Gregg
źródło
0

Użyj tego:

cd (your directory here)
del *.* /f /s /q
Theprogrammer7018
źródło
2
Czy mógłbyś dodać krótkie wyjaśnienie dotyczące flag? Dzięki temu ta odpowiedź będzie jeszcze cenniejsza. Dzięki.
rsjaffe
Zostało to już wspomniane w zaakceptowanej odpowiedzi .
Melebius
0

Usuń wszystkie pliki i podkatalogi

cd /d Directory && rd /s /q .\
v_b
źródło
Twoja odpowiedź wydaje się być duplikatem innych odpowiedzi (niektóre mają 10 lat). Nie widzę więcej ani lepszych wyjaśnień ani żadnej innej korzyści
jeb
1
@jeb, właściwie to nie jest. Jest trochę inny, a ta niewielka różnica jest kluczowa i sprawia, że ​​jest lepszy. 👍😉
Synetech