Как удалить файлы рекурсивно - PullRequest
33 голосов
/ 21 января 2011

У меня есть структура каталогов / foo / bar / fooBar / ... Я хочу написать команду Windows, в которой я могу указать путь до каталога foo, и она рекурсивно удаляет все файлы и каталог в / foo, но она НЕ должна удалять каталог foo.

Я использовал rmdir /q /s [path to foo], но эта команда также удаляет каталог foo. Дайте мне знать, если есть какие-либо команды, чтобы выполнить это.

Ответы [ 9 ]

47 голосов
/ 21 января 2011
rd /s /q /path/to/foo
md /path/to/foo
9 голосов
/ 30 апреля 2012
del /f /s /q DirectoryWhichContainsFilesToDelete/\*

При этом будут удалены все файлы в папке DirectoryWhichContainsFilesToDelete без удаления самой папки.Веселитесь:)

6 голосов
/ 25 января 2013

Я тоже почесал голову на этом. Довольно просто создать цикл for, использующий rmdir, однако он оставляет после себя папки с пробелами в длинных именах. Можно манипулировать списком директорий и получать имена файлов 8.3, однако здесь есть гораздо более простое решение.

Затем создайте пустую папку;

robocopy \empty_folder \folder_with_sub_folders /PURGE

Все подпапки и файлы будут удалены.

5 голосов
/ 11 апреля 2013
del X /f /s /q 
rd X /s /q 

это БУДЕТ удалить каталог ROOt. сделай это снова с

 md X

или сначала сделайте его копию.

в противном случае вам придется делать групповые фанки

 dir X /ad /b

даст вам список непосредственных подкаталогов X. Вы можете поработать с остальными

3 голосов
/ 21 февраля 2013

Я искал простую команду для рекурсивного удаления всех файлов в каталоге, но оставил структуру каталога без изменений.Итак, может быть, это может быть интересно;)

for /f "delims=" %i in ('dir /B /S /A:-DH') do @del /F /Q /A:H "%i"

Команда 'dir / B / S / A: -D' рекурсивно перечисляет только файлы (/ A: -D) в текущем каталоге (/ S)без сводного отчета 'dir' (/ B).'For' перебирает каждую полную строку (/ delims =) и выполняет команду удаления принудительно и тихо.Я также использовал скрытый флаг (/ H) как для вывода, так и для удаления некоторых загадочных (например, thumbs.db) файлов.

2 голосов
/ 16 февраля 2017

Попробуйте использовать Powershell:

powershell -Command "Remove-Item '\foo\*' -Recurse -Force"
2 голосов
/ 21 января 2011

deltree / foo / * должно работать нормально.

1 голос
/ 28 июня 2012

Я использовал это в командном файле в прошлом. Для навигации по структуре каталогов используется цикл for.

Здесь я удаляю подкаталоги cvs из дерева, необходимые при копировании из одной ветви в другую.

@echo off
if /I exist CVS. rd CVS /s /q >nul
for /F %%z in ('dir cvs /ad /s /b') do echo %%z && rd /s /q %%z
echo Batchfile %0 is complete
0 голосов
/ 13 января 2017

Чтобы предотвратить удаление каталога foo, попробуйте изменить каталог на foo до удаления, например:

cd c: \ foo rd / s / qc: \ foo

Это удалитвсе файлы и папки под foo, но НЕ foo.Сообщение об ошибке будет отображаться следующим образом: «Процесс не может получить доступ к файлу, поскольку он используется другим процессом».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...