Что же случилось с дельтри, и какова его замена?


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

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

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

10 65

10 ответов:

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

rd /s /q c:\foobar

чего всем не хватает, так это rd и не точная замена для deltree как казалось бы (почти) каждая страница, возвращенная Гуглом для 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 /f /q c:\foobar
del /f /q c:\baz.txt

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

вы можете скопировать 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.

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

Он был заменен на команды: RMDIR или RD

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

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

пример:

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

документы:

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 *
rmdir /s /q directory
$ 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

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

powershell -Command "Remove-Item 'PathToMyDirectory\*' -Recurse -Force"

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

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

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

rd /s MY_DOOMED_DIR

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

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

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

cd /d Directory && rd /s /q .\