2011-01-21 5 views
30

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

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

+0

что, если вы кд к/путь/к/Foo перед выполнением RmDir? – BigMike

+3

del/s * .xml Работает в Windows 10 – JenonD

+0

Возможный дубликат [Что когда-либо случалось с deltree, и какова его замена?] (Http://stackoverflow.com/questions/338895/what-ever-happened-to- deltree-and-whats-its-replacement) –

ответ

42
rd /s /q /path/to/foo 
md /path/to/foo 
+0

У меня было множество вложенных папок и файлов с некоторыми, которые были только для чтения. Это удалило все из них, кроме только чтения, что я и ожидал. Это было лучше, чем функциональность Windows Server 2003, которая остановила бы процесс, когда он столкнулся с файлом только для чтения. Благодаря! –

2

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

+1

Мне жаль, что у меня нет команды deltree на Windows XP – Akshay

+0

Тогда вам следует придерживаться решения @ Ferruccio. –

+0

Не работает в win7 x64 – m1m1k

7
del /f /s /q DirectoryWhichContainsFilesToDelete/\* 

Это удалит все файлы в папке DirectoryWhichContainsFilesToDelete, не удаляя саму папку. Удачи :)

+3

Не удаляет ** каталоги ** внутри DirectoryWhichContainsFilesToDelete. –

+0

Это сработало для моих целей. –

1

Я использовал это в пакетном файле в прошлом. Он использует цикл 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 
6

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

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

robocopy \empty_folder \folder_with_sub_folders /PURGE 

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

3

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

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

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

+0

это сработало для меня тоже, мне пришлось удалить определенные файлы, соответствующие шаблону рекурсивно во всех подпапках, поэтому я использовал 'for/f 'delims ="% i in (' dir/b/ad/s "P: \ Системы \ ALPS \ ~ $ PS * "') делают @del/F/Q/A: H"% i "' и ничего себе, это сработало! –

4
del X /f /s /q 
rd X /s /q 

это удалит каталог ROOt. сделайте это снова с

md X 

или сделайте копию первой.

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

dir X /ad /b 

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

+0

работает в win7 x64. Благодаря! – m1m1k

0

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

кд C: \ Foo е/с/дс: \ Foo

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

1

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

powershell -Command "Remove-Item '\foo\*' -Recurse -Force" 
Смежные вопросы