Пакетная команда для удаления всех вложенных папок с определенным именем
У меня есть каталог как таковой:
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"