Ответ 1
rd /s /q /path/to/foo
md /path/to/foo
У меня есть структура каталогов /foo/bar/fooBar/... Я хочу написать команду Windows, где я могу упомянуть путь до каталога foo, и он рекурсивно удаляет все файлы и каталог в /foo, но НЕ должен удалять каталог foo.
Я использовал rmdir /q /s [path to foo]
, но эта команда также удаляет каталог foo. Сообщите мне, есть ли какая-либо команда для выполнения этого.
rd /s /q /path/to/foo
md /path/to/foo
del /f /s /q DirectoryWhichContainsFilesToDelete/\*
Это приведет к удалению всех файлов в папке DirectoryWhichContainsFilesToDelete
без удаления самой папки.
Удачи:)
Я тоже почесал голову над этим. Достаточно просто создать цикл for, который использует rmdir, однако он оставляет папки, у которых есть пробелы в длинных именах. Можно управлять списком каталогов и получать имена файлов 8.3, но это гораздо более простое решение.
Создайте пустую папку, затем
robocopy \empty_folder \folder_with_sub_folders /PURGE
Все подпапки и файлы будут удалены.
del X /f /s /q
rd X /s /q
этот WILL удалит каталог ROOt. сделайте это снова с помощью
md X
или сначала сделайте копию.
в противном случае вам придется делать пакетную funkiness
dir X /ad /b
предоставит вам список непосредственных подкаталогов X. вы можете решить остальные
Я искал простую команду, чтобы удалить все файлы в каталоге рекурсивно, но оставив структуру каталогов неизменной. Так, может быть, это может быть интересно;)
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) файлов.
deltree/foo/* должен работать нормально.
Я использовал это в пакетном файле в прошлом. Он использует цикл 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
Попробуйте использовать Powershell:
powershell -Command "Remove-Item '\foo\*' -Recurse -Force"
Чтобы предотвратить удаление каталога foo, попробуйте изменить каталог до foo до удаления, например:
cd c:\foo rd/s/q c:\foo
Это приведет к удалению всех файлов и папок под foo, но НЕ foo. Появится сообщение об ошибке: "Процесс не может получить доступ к файлу, потому что он используется другим процессом".