1

Тема: CMD/BAT: Удаление по маске

Помогите пожалуйста.
у меня здача стоит таким образом: при запуске bat файла удалялось всё по маске (например *.txt) но не затрагивались бы системные папки такие как Windows, Program Files ну и т.д.
Я попробовал взять код:

@echo off
Setlocal EnableDelayedExpansion EnableExtensions
 
::Попка для удаления содержащих в ней каталогов
Set Src=L:\bash\test
::Файл-список ислючений каталогов любой степени вложенности
Set ExcList=L:\bash\test\Exclude.txt
 
Call :Init
Call :AllFolders "%Src%"
pause
Goto :eof
 
::Переписываем содержимое файла в массив (ускорение операций)
:Init
For /f "UseBackQ Delims=" %%A in ("%ExcList%") do (
  Set /A n+=1
  Set Ex!n!=%%A
)
Exit /b
 
::Обходим папки рекурсивно
:AllFolders
Call :Check "%~1"
if %errorlevel%==1 Exit /B
For /f "delims=" %%A in ('dir /b /a:d "%~1"') do (
  Call :AllFolders "%~1\%%A"
)
::Проверка не удаляем ли рабочий каталог
if /i "%~1" neq "%Src%" Echo rd /s /q "%~1"
Exit /b
 
::Проверить есть ли переданный как аргумент каталог в массиве
:Check
For /L %%A in (1,1,%n%) do (
  if /i "%~1"=="!Ex%%A!" Exit /B 1
)
Exit /b 0

попробовал изменить 5 строчку. вместо:

Set Src=L:\bash\test

просто поставил по маске, то есть:

Set Src=C:\*.txt

в Exclude.txt просто добавил пару папок которые трогать не нужно (Wondows, Programm Files).
В общем не работает мой вариант. Куда копать?

2

Re: CMD/BAT: Удаление по маске

Какбэ... можно сперва создать массив из папок в корне диска, которые следует обходить в поисках файлов. Например, получить список папок можно так:

for /f "tokens=3,* delims=^< " %i in ('dir /a:d /a-h %systemdrive% ^| findstr /irv "windows program"') do @(if "%i" equ "DIR>" @echo %j)

С остальным не так уж сложно разобраться.