Пакетная команда для удаления всех вложенных папок с определенным именем

У меня есть каталог как таковой:

D:\Movies
D:\Movies\MovieTitle1\backdrops\
D:\Movies\MovieTitle2\backdrops\
D:\Movies\MovieTitle3\backdrops\
D:\Movies\MovieTitle4\backdrops\

Как сделать так, чтобы командный файл удалил все папки с именем "Фоновые изображения"? Я бы предпочел, чтобы он запускался рекурсивно только с диска D: \, если это возможно.

Ответы

Ответ 1

Короткий ответ:

FOR /d /r . %d IN (backdrops) DO @IF EXIST "%d" rd /s /q "%d"

Я получил ответ от одного из бесчисленных ответов на тот же вопрос о переполнении стека:

Инструмент командной строки для рекурсивного удаления папки с указанным именем в Windows?

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

Как предложил Алекс в комментарии, этот пакетный скрипт должен быть надежным:

D:
FOR /d /r . %d IN (backdrops) DO @IF EXIST "%d" rd /s /q "%d"

Ответ 2

Выше ответ не совсем работал для меня. Я должен был использовать комбинацию @itd раствора и @Groo комментарий. Слава им.

Окончательное решение для меня было (на примере фоновой папки):

FOR /d /r . %%d IN ("backdrops") DO @IF EXIST "%%d" rd /s /q "%%d"

Ответ 3

Я открою другой ответ, потому что это было бы слишком тесно в комментариях. Был задан вопрос, что делать, если вы хотите выполнить из/в другую папку, и я хочу привести пример для нерекурсивного удаления.

Прежде всего, когда вы используете команду в cmd, вы должны использовать %d, но когда вы используете ее в .bat, вы должны использовать %%d.

Вы можете использовать подстановочный знак, чтобы просто обрабатывать папки, которые, например, начинаются с "backdrops": "backdrops*".

Рекурсивное удаление папок, начиная с папки, в которой находится .bat:

FOR/d/r. %d IN ("backdrops") DO @IF EXIST "%d" rd/s/q "%d"

Не рекурсивное удаление папок в папке, в которой находится .bat (используется с подстановочным знаком, так как в любом случае вы не можете иметь более одной папки с одинаковым именем):

FOR/d %d IN ("backdrops*") DO @IF EXIST "%d" rd/s/q "%d"


Рекурсивное удаление папок, начиная с выбранной вами папки:

FOR/d/r "PATH_TO_FOLDER" %d IN ("backdrops") DO @IF EXIST "%d" rd/s/q "%d"

Не рекурсивное удаление папок в папке по вашему выбору (используется с подстановочным знаком, так как в любом случае вы не можете иметь более одной папки с одинаковым именем):

FOR/d %d IN ("PATH_TO_FOLDER/backdrops*") DO @IF EXIST "%d" rd/s/q "%d"