Подтвердить что ты не робот

Как рекурсивно удалять файлы

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

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

4b9b3361

Ответ 1

rd /s /q /path/to/foo
md /path/to/foo

Ответ 2

del /f /s /q DirectoryWhichContainsFilesToDelete/\*

Это приведет к удалению всех файлов в папке DirectoryWhichContainsFilesToDelete без удаления самой папки. Удачи:)

Ответ 3

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

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

robocopy \empty_folder \folder_with_sub_folders /PURGE

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

Ответ 4

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

этот WILL удалит каталог ROOt. сделайте это снова с помощью

 md X

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

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

 dir X /ad /b

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

Ответ 5

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

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 =) и выполняет команду delete, принудительно и тихо. Я также использовал скрытый флаг (/H) как для перечисления, так и для удаления некоторых таинственных (например, thumbs.db) файлов.

Ответ 6

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

Ответ 7

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

Ответ 8

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

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

Ответ 9

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

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

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