30

Допустим, на диске D: есть какая-то папка:

D:\Air
D:\Abonden
D:\All
D:\Whatever

Я хочу удалить все папки, начинающиеся с "A" (включая все подпапки и файлы). Я попробовал эту команду:

rmdir D:\A* /s /q

Я получаю ошибку, хотя :(

Неверный синтаксис имени файла, имени каталога или метки тома.

Команда del работает с * , но мне нужно также удалить папки.
Есть ли способ добиться этого с помощью команды rmdir ?

4 ответа4

29
cd c:\temp
for /f %i in ('dir /a:d /s /b A*') do rd /s /q %i

Используйте это, чтобы проверить, хотя:

for /f %i in ('dir /a:d /s /b A*') do echo rd /s /q %i

Это выведет команды для запуска в командную строку и позволит вам увидеть, что происходит.

Имейте в виду, что это также будет искать подпапки, такие как "C:\temp\jjj\aaa" и удалит папку aaa. Если вы хотите, чтобы он просто просматривал папки верхнего уровня «C:\temp\aaa», то удалите "/s" из команды.

Ключом к этому является A *, где вы должны указать строку поиска. Он будет принимать такие символы подстановки, как aaa* , aaa* и *aaa* если вы этого хотите.

19

Удаление папок с использованием подстановочных знаков

Одна только команда rmdir / rd не поддерживает символы подстановки (то есть * и ?). Вы можете обойти это ограничение, заключив его в цикл for .

Пример использования

for /d %G in ("X:\A*") do rd /s /q "%~G"

Примечание. При удалении файлов и папок вы можете сначала заменить команду rd на echo . Таким образом, вы можете гарантировать, что все, что не должно быть удалено, действительно будет.

Несколько моделей

Чтобы удалить несколько папок, соответствующих разным шаблонам, синтаксис не слишком отличается. Как правильно заметил @dbenham, достаточно однострочной команды. Вы также можете указать разные пути:

for /d %G in ("X:\A*","Y:\Whatever\B*","Z:\C?D") do rd /s /q "%~G"

Бонус - проверка существования папки

Если вы хотите проверить, существуют ли определенные папки, вы можете использовать следующую команду:

dir /b /a:d "X:\A*" >nul 2>&1 && echo Folders exist. || echo No folders found.

дальнейшее чтение

15

Как никто еще не рассказал ОП о файлах ?!

forfiles /P D:\ /M A* /C "cmd /c if @isdir==TRUE rmdir /s /q @file"

/P is pathname - where the searching starts
/M is search mask, looking for files that start with A
/C is the command to execute
/S is recursive subfolders (didn't include here, because op didn't ask)
7

Ответ adn31415 правильный, но ломается, если вы поместите это в пакетный или cmd-скрипт. Я часами колотил головой, пока не понял, как ты это используешь.

В командном окне DOS:

for /d %G in ("X:\A*") do rd /s /q "%~G"

В пакетном или cmd скрипте:

for /d %%G in ("X:\A*") do rd /s /q "%%~G"

Если вы хотите поместить его в файл «.bat» или «.cmd», вам нужно удвоить символы «%».

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