Рекурсивно удалить все папки, начинающиеся с

Мне нужно написать команду в файле .bat, которая рекурсивно удаляет все папки, начиная с определенной строки. Как я могу этого добиться?


person glmxndr    schedule 27.11.2009    source источник


Ответы (4)


Это полный ответ, который вы ищете:

FOR /D /R %%X IN (certain_string*) DO RD /S /Q "%%X"

где, очевидно, вам нужно заменить certain_string строкой, с которой начинаются ваши папки.

Это удаляет РЕКУРСИВНО, как вы просили (я имею в виду, что он проходит через все папки и подпапки).

person Marco Demaio    schedule 13.05.2010
comment
Ничего, кроме ответа @Maorco, у меня не сработало. К сожалению, у него нет других голосов, кроме моих. :( - person IsmailS; 10.06.2010
comment
Спасибо. Мне пришлось исключить два каталога, в результате получилась такая команда: FOR /D /R %%X IN (*.lproj) DO IF /I "%%~xnX" neq "en.lproj" IF /I "%%~xnX" neq "english.lproj" RD /S /Q "%%~fX". Объяснение: %%~xnX равно полному имени каталога. IF /I .. neq "en.lproj" фильтрует все каталоги, которые равны "en.lproj" (/I = без учета регистра). IF могут быть вложенными. В конце концов, я рекурсивно удалил все каталоги, заканчивающиеся на .lproj, кроме en.lproj и english.lproj. - person Rob W; 11.06.2012

Как насчет:

for /d %a in (certain_string*) do rd /s %a

Это будет работать из командной строки. Внутри командного файла вам, как обычно, придется удвоить %s:

@echo off
for /d %%a in (certain_string*) do rd /s %%a
person Greg Hewgill    schedule 27.11.2009
comment
Ой. Мне нужно еще поспать ... или чай ... (ударяется головой о стол) - person Joey; 27.11.2009
comment
Хм, хотя это, вероятно, не приведет к рекурсии в дереве каталогов и поиску более глубоких папок, соответствующих критериям, верно? (Мои решения тоже этого не делают, но я только что понял, что имел в виду OP). - person Joey; 27.11.2009
comment
Мне пришлось немного расширить это по сравнению с моей первоначальной простой попыткой, потому что rd, похоже, не расширяет подстановочные знаки сам по себе. - person Greg Hewgill; 27.11.2009
comment
Для рекурсивного поиска каталогов, начинающихся с префикса, вы можете использовать for /r или их комбинацию. - person Greg Hewgill; 27.11.2009
comment
О, нехорошо. Я тоже не пробовал, так как в настоящее время у меня нет каталогов, которые можно разрушить :-) - person Joey; 27.11.2009
comment
@ Грег Хьюгилл: это сработало? Это не работает при попытке удалить каталоги, заканчивающиеся на .delme, я попробовал ваше предложение следующим образом: for /d %%x in (*.delme) do rd /s /q "%%x", но похоже, что это не работает. - person Marco Demaio; 22.03.2011

Я думаю, незаконченный. Если вы имели в виду «Рекурсивно спускаться по иерархии каталогов для удаления всех папок, начинающихся с определенной строки», тогда может быть достаточно следующего:

for /f "delims=" %%x in ('dir /b /ad abc*') do rd /s /q "%%x"

Это выполнит рекурсию в дереве каталогов, найдет все папки, начинающиеся с «abc», перебирает этот список и удаляет каждую папку.

Возможно, вам нужно обернуть if exist вокруг rd в зависимости от порядка, в котором каталоги найдены и возвращены. В общем, повторение чего-либо и одновременное изменение этого редко бывает хорошей идеей, но иногда это работает :-)

person Joey    schedule 27.11.2009
comment
Рассел: это сработало? Не работает при попытке удалить каталоги, заканчивающиеся на .delme, я попробовал ваше предложение следующим образом: for / f delims = %% x in ('dir / b / ad * .delme') do rd / s / q% % x, НО ЭТО НЕ РАБОТАЕТ. - person Marco Demaio; 12.05.2010
comment
@Marco: Не надо кричать. Если сомневаетесь, задайте новый вопрос и четко и подробно расскажите о своих проблемах. Что-то вроде «Не работает» обычно является плохим сообщением о проблеме. - person Joey; 12.05.2010
comment
Россель: не кричал, я просто писал заглавными буквами. Тогда я задам новый вопрос. - person Marco Demaio; 13.05.2010

rm -rf - "Имя каталога"

Ex : rm -rf -- "-2096378"

Вышеупомянутая команда удалит папки / каталоги, начинающиеся с - или подстановочных знаков.

person shyamsundar Ankam    schedule 14.07.2015