Как удалить все папки с именем Sample из каталога и подпапок?

Я ищу командную строку, которую я могу добавить в пакет, который я использую.

Вот что мне нужно уметь:

Допустим, у меня есть каталог:
C:\Users\username\Videos

С подкаталогами

C:\Users\имя пользователя\Videos\test\sample
C:\Users\имя пользователя\Videos\test2\sample

Какую команду мне нужно использовать для удаления папок образцов в обоих подкаталогах, но не папок test/test2?

Если вы знаете способ использования RMDIR, это было бы здорово, но если нет, я открыт для идей.


person Brendan    schedule 24.06.2015    source источник


Ответы (2)


Команда

dir /b /s /ad "C:\Users\username\Videos\sample"

создаст список папок для удаления. Теперь, чтобы обработать этот список, мы заключаем команду в команду for /f, которая будет выполнять команду удаления каталога для каждой строки в выводе предыдущей команды.

@echo off
    setlocal enableextensions disabledelayedexpansion

    for /f "delims=" %%a in ('
        dir /b /s /ad "C:\Users\username\Videos\sample"
    ') do rd /s /q "%%a"

Или, чтобы использовать его из командной строки

for /f "delims=" %a in ('dir /b /s /ad "C:\Users\username\Videos\sample"') do rd /s /q "%a"

В обоих случаях for /f будет перебирать выходные строки команды dir, сохраняя строку в ее заменяемом параметре %a и выполняя код после предложения do.

По умолчанию команда for обозначает строки ввода, разделяя их пробелами и символами табуляции в качестве разделителей. Чтобы отключить это поведение, используется предложение delims=: без разделителей есть только один токен, содержащий полную строку.

person MC ND    schedule 24.06.2015

Что о:

for /f %i in ('dir /b/s/ad ^| findstr -I "\Sample$"') do rmdir %i

Это делает рекурсивный список каталогов и фильтрует образцы каталогов, а затем берет список и удаляет каждый из них. Если вы собираетесь поместить его в пакетный файл, вам нужно удваивать каждый% следующим образом:

for /f %%i in ('dir /b/s/ad ^| findstr -I "\Sample$"') do rmdir %%i
person Jerry Jeremiah    schedule 24.06.2015