34

Я хочу удалить все содержимое указанной папки в Windows 7 через командный файл. Моя проблема в том, что «del» или «erase» удаляет только файлы, а не папки, а «rmdir» или «rd» всегда удаляет указанную папку с ее содержимым, но я хочу удалить только содержимое, а не саму папку , Я попробовал команду ' rmdir /S /Q "C:\Share\*" ', которая выдала мне синтаксическую ошибку.

Как правильно это сделать?

Я работаю на 64-битной Windows 7 Professional и имею права администратора.

6 ответов6

34

Ваш пакетный файл должен будет выполнить две команды: одну для очистки файлов, а другую для удаления дочерних каталогов. Я предположил, что каталог, который вы хотите удалить, это C:\Share\

Пакетный файл должен выглядеть примерно так:

del /s /f /q c:\share\*.*
for /f %%f in ('dir /ad /b c:\share\') do rd /s /q c:\share\%%f

del /s /f /q будет рекурсивно искать по дереву каталогов, удаляя любые файлы (даже файлы только для чтения), не запрашивая подтверждения.

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

Если не считать удаления всей папки и ее повторного создания (что я не думаю, что вы хотите сделать из-за разрешений?) это должен быть самый простой способ очистить папку.

27
rmdir /s/q C:\Share

Вы получаете "синтаксическую ошибку", потому что rmdir принимает только полные имена, а не подстановочные знаки. (В cmd.exe расширение по шаблону оставлено для отдельных программ; не все из них делают.)

Если у вас много каталогов, начинающихся с Share... , используйте цикл for .

for /d %f in (C:\Share*) do rmdir /s/q "%f"
12

Попробуйте это в командной строке:

rd /s/q "C:\Share"
2
for /f "delims=" %%f in ('dir /ad /b c:\share\') do rd /s /q c:\share\%%f

Это не работает, если подкаталоги содержат другие каталоги, которые содержат пробелы.

Чтобы сделать это, мне нужно было процитировать последнюю строку, как это

for /f "delims=" %%f in ('dir /ad /b c:\share\') do rd /s /q "c:\share\%%f"

По-видимому, это заставляет команду работать со строкой в кавычках вместо самой строки.

2

Как насчет ?

rmdir /S /Q "target"
mkdir "target

РЕДАКТИРОВАТЬ: конечно, это решение применимо только тогда, когда вы можете терпеть кратковременное отсутствие папки.

0

Я хотел бы попробовать это в папке, где все подпапки должны быть удалены, но корень (и файлы в корне) остались без изменений: для /D% v в (*) сделать rd /s /q% v

for /D соответствует каталогам, а rd /s /q удаляет каждый за раз

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .