Что когда-либо случилось с Дельтри, и какова его замена? - PullRequest
74 голосов
/ 04 декабря 2008

В более ранних версиях MS-DOS - я хочу сказать, версия 7, но я могу ошибаться - была команда deltree, которая рекурсивно удаляла все подкаталоги и файлы по заданному пути.

deltree больше не существует, но del, похоже, не унаследовал способность удалять дерево. del /s удаляет файлы, но не папки.

Как вам легко (т.е. одной командой) удалить дерево из командного файла?

Ответы [ 10 ]

82 голосов
/ 15 января 2013

Как уже упоминалось, команда rd имеет переключатель /s для рекурсивного удаления подкаталогов. Вы можете комбинировать его с переключателем /q для принудительного удаления подкаталога (и его содержимого) без запроса, например:

rd /s /q c:\foobar

Чего всем не хватает, так это того, что rd является , а не точной заменой deltree, так как на первый взгляд ( почти ) каждая страница, возвращаемая Google для windows deltree, будет иметь вас верить. Команда deltree работает как для каталогов , так и для файлов , что делает ее единой удобной универсальной командой удаления. То есть действительны оба из следующих пунктов:

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

Однако rd (что неудивительно) работает только для каталогов . Таким образом, только первая из этих команд действительна, в то время как вторая выдает ошибку и оставляет файл без удаления:

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

Кроме того, команда del работает только для файлов, но не для каталогов, поэтому допустима только вторая команда, а первая выдает ошибку:

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

Нет встроенного способа удаления файлов и каталогов, как это можно сделать с помощью deltree. Использование rd и del по отдельности в лучшем случае неудобно, поскольку требует определения, является ли объект файловой системы (file- / folder-name) файлом или каталогом, что не всегда возможно или практично.

Вы можете скопировать команду deltree из предыдущей ОС, однако она будет работать только на 32-разрядных версиях Windows, поскольку это 16-разрядная команда DOS (даже в Windows 9x).

Другой вариант - создать пакетный файл, который вызывает как del, так и rd; как то так:

::deltree.bat

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

Вы бы назвали это так:

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

Это вызывает и rd, и del, передавая аргументы и перенаправляя вывод в nul, чтобы избежать ошибки, которую один из них будет неизменно излучать.

Возможно, вы захотите настроить поведение, чтобы приспособить или упростить параметры или разрешить сообщения об ошибках, но даже в этом случае это не идеально и не является прямой заменой deltree.

Альтернативой является получение стороннего инструмента, хотя его поиск - реальное упражнение в создании поисковых запросов.

41 голосов
/ 04 декабря 2008

Заменено на команды: RMDIR или RD

Удалить все подкаталоги с / S

Используйте тихо с / Q

Пример:

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

Документация:

6 голосов
/ 28 марта 2015

Чувствуя ностальгию, я написал свой собственный deltree.exe. Он работает как с каталогами, так и с файлами, а также использует SHFileOperation () для скорости.

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.

Требуется подстановочный знак, и вы можете использовать его как unix rm:

deltree -rf *
5 голосов
/ 04 декабря 2008
rmdir /s /q directory
4 голосов
/ 16 февраля 2017

В настоящее время вы можете использовать Powershell для выполнения той же задачи:

powershell -Command "Remove-Item 'PathToMyDirectory\*' -Recurse -Force"
4 голосов
/ 04 декабря 2008
$ help rd
Removes (deletes) a directory.

RMDIR [/S] [/Q] [drive:]path
RD [/S] [/Q] [drive:]path

    /S      Removes all directories and files in the specified directory
            in addition to the directory itself.  Used to remove a directory
            tree.

    /Q      Quiet mode, do not ask if ok to remove a directory tree with /S
2 голосов
/ 10 января 2013

На самом деле команды RMDIR и RD в современной операционной системе Windows объединяют команды RD и Deltree из Win 98 в одну команду. Это внутренняя команда, поэтому вы не найдете RD.exe и RMDIR.exe.

Набрав это "RD /?" в cmd без двойных qoutes вы получите именно то, что вы хотите.

0 голосов
/ 01 октября 2018

Удалить все файлы и подкаталоги

cd /d Directory && rd /s /q .\
0 голосов
/ 17 августа 2018

Используйте это:

cd (your directory here)
del *.* /f /s /q
0 голосов
/ 10 июня 2016

для рекурсивного удаления каталога и всего его содержимого

rd /s MY_DOOMED_DIR
...