Чтобы очистить проект, мне нужно найти все (под)папки, именованные palette-library
начиная с текущего местоположения файла пакетного скрипта, а затем удалить все его содержимое, за исключением папки с именем penstyle-opacity textures
и файла с именем penstyle-opacity.plt
. Я использую Windows 7.
Я много гуглил, но пока что нашел только фрагменты, которые могут либо искать, находить и удалять все содержимое папки, либо удалять все, кроме определенного файла из предопределенного местоположения. Однако мне не удается совместить эти два.
решение1
Возможно, это не самый элегантный способ, но вы можете сначала заархивировать файлы по маске, затем очистить дерево файлов, а затем распаковать архив с указанием путей.
Например:
7z a -r my_archive penstyle-opacity.plt
или:
7z a -r my_archive "palette-library\penstyle-opacity textures\penstyle-opacity.plt"
Попробуйте и выберите то, что вам больше подходит.
решение2
Первый параметр — папка для удаления, остальное — список исключений файлов, подстановочные знаки разрешены, удалит все папки и их подпапки, кроме файлов, соответствующих списку. Хитрость в том, чтобы сначала скрыть все исключения, а затем отобразить их после удаления.
@echo off
rem test routine
call :DELDIREXCEPT "c:\testfolder" "pru 2" "must leave.docx" *.jpg *.png *.exe
GOTO :FIN
REM * * * * SUBROUTINES FROM HERE * * * *
REM
:DELDIREXCEPT
rem deletes folder except a list of files
rem ~ removes quotes
set delDir=%~1
if not exist "%delDir%" goto :FIN
pushd %delDir% 2>nul || goto :FIN
rem get rest of params
shift
rem https://stackoverflow.com/questions/357315/how-to-get-list-of-arguments/34920539#34920539
rem Delayed expansion disabled in order not to interpret "!" in param values;
rem however, if a param isn't quoted, chars like "^", "&", "|" get interpreted
setlocal disabledelayedexpansion
set param_0=0
:repeat
set "lastparam=%~1"
set /a param_0+=1
if defined lastparam (
set "param_%param_0%=%lastparam%"
echo Hide: "%lastparam%"
attrib "%lastparam%" +h /s /d 2>nul
shift
goto :repeat
) else set /a param_0-=1
setlocal enabledelayedexpansion
echo .. deleting %delDir%
del /s /q /a-h *.* 2> NUL
echo ...
:: unhide arguments
for /l %%Z in (1 1 %param_0%) do (
echo/ unHide: "!param_%%Z!"
attrib /s /d "!param_%%Z!" -h 2>nul
)
popd
goto :FIN
REM END DELDIREXCEPT
:FIN