배치 스크립트를 사용하여 특정 이름을 가진 모든 폴더를 찾고 두 파일을 제외한 모든 내용을 삭제하려면 어떻게 해야 합니까?

배치 스크립트를 사용하여 특정 이름을 가진 모든 폴더를 찾고 두 파일을 제외한 모든 내용을 삭제하려면 어떻게 해야 합니까?

프로젝트를 정리하려면 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

관련 정보