Що коли-небудь траплялося з deltree і яка його заміна?


81

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

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

Як легко (тобто однією командою) видалити дерево з командного файлу?


2
deltree був представлений у версії 5.0 (я все ще пам'ятаю радість від можливості ним користуватися) - Чоловік, якого я відчуваю старим.
Mark D

Відповіді:


90

Як зазначали інші, 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індивідуально в кращому випадку незручно, оскільки вимагає розрізнити, чи є об’єкт файлової системи (ім’я файлу / папки) файлом або каталогом, що не завжди можливо або практично.

Ви можете скопіювати 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.

Альтернативою є отримання стороннього інструменту, хоча його пошук є справжньою вправою у розробці пошукових запитів.


2
@TobyAllen, “rm”? Ви мали на увазі рд ? Якщо так, то вам потрібно перечитати довідковий текст; там сказано Видаляє всі каталоги та файли у вказаному каталозі на додаток до самого каталогу. Використовується для видалення дерева каталогів. Як я вже сказав, файли не видаляються. Якщо ви використовуєте його так:, rd /s foobar.txtвін запитає вас, якщо ви впевнені, і якщо ви скажете "так" (або скористайтеся /qперемикачем), то це The directory name is invalid.
видасть

Ви насправді можете видалити все, що знаходиться в каталозі (включаючи його підкаталоги) RMDIR /S, так що сказати, що немає можливості видалити як файли, так і папки за один удар, насправді неправильно.
vapcguy

@vapcguy, rd /sстосується лише каталогу, а не файлів у ньому . Для того, щоб видалити файли в ньому, вам доведеться скористатися rdв самому каталозі. Наприклад, ви не можете сказати rd c:\target\foobar.txt, що вам доведеться скористатися rd /s c:\target, але, можливо, ви не захочете видалити саму директорію, а лише її вміст. deltreeміг це зробити, але rd /sне може, rd /sтакож видаляє сам каталог.
Synetech

Зверніть увагу, я сказав RMDIR /S- ні rd /s. Але навіть rdякщо, якщо каталог зник, як файли не видаляються? Навіть якщо цього не було, файли фактично осиротіли і повинні бути сміттям, зібраним системою. І навіть якщо цього не сталося, це, звичайно, трапляється, якщо ви заново створюєте каталог - ви знову не отримаєте чарівного списку своїх файлів. Покажчики по суті видаляються. Отже, ви хочете сказати, що просто ніколи не повертаєте цей простір, тому що ви ніколи не зможете видалити ці файли, якщо ви використовуєте rd /s? Не впевнений, що повірю в це - це буде жахлива помилка. Суть полягає в тому, щоб видалити файли та реж.
vapcguy

Якщо ви створюєте каталог в папці «Документи» під назвою «тест», створити текстовий документ тест там в Windows, потім закрийте вікно Провідника, перейдіть в командний рядок, cd Documents, rd /s test, ваш каталог і ваш текстовий файл буде видалений. rmdir /s testпрацює теж. Ви НІКОЛИ не намагаєтесь використовувати rd /s C:\Users\me\Documents\test\test.txt- це було б абсолютно дурним. Але ви МОЖЕТЕ та ПОВИННІ використовувати команду в каталозі, а не в назві файлу. Але, видаливши каталог, ви можете видалити файли.
vapcguy

43

Його замінили на команди: RMDIR або RD

Видаліть усі підкаталоги за допомогою / S

Використовуйте його тихо за допомогою / Q

Приклад:

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

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


3
"RMDIR / S / Q." Ефективно стирає поточний каталог і все, що знаходиться під ним. Так, він скаржиться на те, що не може видалити поточний каталог, що може бути корисним. Тільки переконайтеся, що ви знаходитесь у правильному каталозі під час його запуску! :)
Ммм

9

Відчуваючи ностальгію, я написав власний файл 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

У наш час ви можете використовувати Powershell для виконання того самого завдання:

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

На жаль, PowerShell роздутий і повільний. : - \ Я ненавиджу, коли компанії намагаються змусити користувачів "оновити" свою останню сміття. 😒
Synetech

4
$ help rd
Видаляє (видаляє) каталог.

Шлях RMDIR [/ S] [/ Q] [диск:]
RD [/ S] [/ Q] [drive:] шлях

    / S Видаляє всі каталоги та файли у вказаному каталозі
            на додаток до самого каталогу. Використовується для видалення каталогу
            дерево.

    / Q Тихий режим, не запитуйте, чи добре видаляти дерево каталогів за допомогою / S

2

Насправді команди RMDIR і RD в сучасній операційній системі Windows об'єднують обидві команди RD і Deltree з Win 98 в одній команді. Це внутрішня команда, тому ви не знайдете RD.exe та RMDIR.exe.

Набравши це "RD /?" в cmd без подвійних цитат ви отримаєте саме те, що хочете.


0

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

rd /s MY_DOOMED_DIR


0

Видаліть усі файли та підкаталоги

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

Ваша відповідь є дублікатом інших відповідей (деяким 10 років). Я не бачу ні кращих, ні кращих пояснень, ні будь-якої іншої переваги
jeb

1
@jeb, насправді це не так. Він дещо відрізняється, і ця незначна різниця є вирішальною і робить його кращим. 👍😉
Synetech
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.