프로젝트를 정리하려면 palette-library
배치 스크립트 파일의 현재 위치에서 시작하여 이름이 지정된 모든 (하위) 폴더를 찾은 다음 이라는 폴더 penstyle-opacity textures
와 이라는 파일을 제외한 모든 내용을 삭제해야 합니다 penstyle-opacity.plt
. 저는 윈도우 7을 사용합니다.
Google을 많이 검색했지만 지금까지 폴더의 모든 내용을 검색, 찾아 삭제하거나 미리 정의된 위치에서 특정 파일을 제외한 모든 내용을 삭제할 수 있는 조각만 찾았습니다. 그러나 그 둘을 하나로 합칠 수는 없습니다.
답변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