it-swarm.com.ru

Что случилось с Deltree, и что его заменит?

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

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

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

69
David Koelle

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

rd /s /q c:\foobar

Чего не хватает всем, так это того, что rd является не точной заменой deltree, поскольку, казалось бы, ( почти ) каждая страница, возвращаемая Googling для 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.

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

79
Synetech

Его заменили команды: RMDIR или RD

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

Используйте это спокойно с/Q

Пример:

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

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

41
Jeremiah

Чувствуя ностальгию, я написал свой собственный файл 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 *
6
raychi
rmdir /s /q directory
5
Jon Skeet

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

powershell -Command "Remove-Item 'PathToMyDirectory\*' -Recurse -Force"
4
Rosberg Linhares
$ help rd 
 Удаляет (удаляет) каталог .

 RMDIR [/ S] [/ Q] [диск:] путь 
 RD [/ S] [/ Q] [диск:] путь 

/S Удаляет все каталоги и файлы в указанном каталоге 
 в дополнение к самому каталогу. Используется для удаления каталога 
 дерево .

/Q Тихий режим, не спрашивайте, нормально ли удалить дерево каталогов с помощью /S
4
Ferruccio

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

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

2
Sohail xIN3N

Использовать этот:

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

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

rd /s MY_DOOMED_DIR
0
Gregg