
Я хочу удалить несколько подкаталогов одного и того же каталога. Каталоги имеют "tmp" в качестве первых трех символов в своем имени. Это не работает:
C:\Documents and Settings\rajesh\Local Settings\Temp> rmdir tmp*
решение1
Команда rmdir
не принимает подстановочные знаки. Вы можете использовать небольшой for
цикл для достижения той же цели. Это запустит rmdir
команду несколько раз — один раз для каждого файла/папки, которые соответствуют заданному шаблону:
for /D %f in (tmp*) do rmdir "%f"
- Обратите внимание, что если папки не пустые и вы хотите, чтобы они были рекурсивно обработаны, вам нужно будет добавить
/S
в конце. - Если вы хотите предотвратить проверку подтверждения, добавьте
/Q
также. - Если вы хотите, чтобы команда не выводилась на печать для каждой строки, добавьте
@
перед командой. - Кавычки вокруг %f позволят удалить папки с пробелами.
Например, при наличии всех этих вариантов у вас будет:
for /D %f in (tmp*) do @rmdir "%f" /Q /S
Чтобы увидеть полное использование, введите rmdir /?
.
решение2
хороший безопасный общий способ - создать файл каталогов, которые вы хотите удалить. dir /ad > blah
Затем проверьте, есть ли в файле то, что вам нужно, затем создайте команду for, которая выводит каждую строку файла. for /f %a in (blah) do @echo %a
Затем измените ее для нужных вам команд, например, эта строка помещает rmdir в начало каждой строки файла for /f %a in (blah) do @echo rmdir %a
или в конец, для добавления /q /s к rmdir %a, который уже там, т.е. используйте @echo rmdir %a /q /s. А затем, разобравшись с тем, какие команды будут выполняться, удалите часть echo, чтобыfor /f %a in (blah) do @rmdir %a /q /s
Другой способ — также использовать этот начальный метод создания файла, перечисляющего подкаталоги для удаления. Таким образом, каждая строка файла может быть изменена для чтения команды на удаление этого подкаталога. Затем используйте sed для файла, чтобы заменить подкаталог x на rmdir x /q /s.
Итак, если у вас есть файл с именем blah. sed "s/.*/rmdir \0 \/q\/s/" blah >f
type f
Посмотрите, в нем есть все команды для удаления каждого подкаталога. Если вас все устраивает и вы хотите его выполнить, вы можете переименовать f в f.bat и выполнить его.