2016-07-28 2 views
2

Я пытаюсь написать пакетный скрипт, удаляющий вложенные папки (egc: \ temp \ root \ students \ students23435), который имеет имя, начинающееся с имени его (родительского) (egc: \ temp \ root \ students).Удалить конкретные вложенные папки с помощью findstr через пакетный файл

папки, выделенные жирным шрифтом, как показано ниже, должны быть удалены:

C: \ Temp \ корень \ студенты

C: \ Temp \ корень \ студенты \ students23435

c: \ temp \ root \ students \ students9875

c: \ temp \ root \ students \ 1234

C: \ TEMP \ корень \ учителя

C: \ Temp \ корень \ учителя \ teachers12345

C: \ TEMP \ корень \ учителя \ teachers898

@echo off 
rem pushd "c:\temp\root\" 
for /F "tokens=*" %%I in ('dir /a:d-s-h /b ^| findstr /B /I /C:"students" /C:"teachers"') do ( 
    echo Removing Directory "%%I" 
    rmdir /s /q "%%I") 
rem popd 

Не могли бы вы помочь мне исправить этот код?

спасибо.

Отличный день.

ответ

0

Первый цикл по всем папкам. Затем для каждой папки %%p внутри, если есть папка с именем %%p\%%p*, удалите ее и все файлы и папки ниже (иначе папка не может быть удалена).

@echo off 

for /f "delims=" %%p in ('dir /b /ad') do (
    for /f "delims=" %%d in ('dir /b /ad "%%p\%%p"* 2^>nul') do echo rmdir /s /q "%%p\%%d" 
) 

Для тестирования я маскировал команду rmdir с echo, так что соответствующие папки будут напечатаны только. Удалите echo, чтобы действительно удалить папки.

0
for /d %%A in (C:\Symbols\*) Do (
    For /F "Delims=" %%B In ('@Dir /b /ad %%A') Do @Echo RD /s C:\symbols\%%B 
    ) 

Есть один способ.

+0

Не понял. Что такое замена «@Dir»? Как я могу пропустить удаление родительских папок (например, c: \ temp \ root \ teachers, c: \ temp \ root \ students)? – PNouma2121

+0

Измените 'C: \ Symbols' на' c: \ temp \ root' и запустите его. –

Смежные вопросы