본문 바로가기
운영체제/Windows

Windows ] 오래된 파일을 삭제하는 배치 스크립트

by eteo 2024. 1. 2.

 

 

 

오래된 파일을 삭제하는 배치 스크립트를 만들 때 forfiles 명령어를 사용할 수 있다.

 

 

forfiles 명령어 기본 형식

forfiles [/P pathname] [/M searchmask] [/S] [/C command] [/D [+ | -] [date | days]]

 

  • /P pathname : 파일이 위치한 폴더 경로 지정, 기본적으로 현재 작업 디렉토리에서 검색을 시작하며 절대경로도 올 수 있다.
  • /M searchmask : 파일 이름 패턴 지정 (*.*, Log??.txt, *.tmp 등)
  • /S : 하위 폴더 포함 검색 옵션
  • /C command : 찾은 파일에 실행할 명령 지정, /C "cmd /c 명령어" 와 같이 작성하면 되며, @file, @path, @fname, @ext 등을 사용해 찾은파일 또는 파일의 경로, 이름 등을 참조할 수 있다. (예시, /C "cmd /c del @file")
  • /D [+ | -] [date | days] : 날짜 필터링
    • /D date: MM/DD/YYYY 형식으로 날짜를 입력하면 지정한 날짜 이후의 파일을 대상으로 한다.
    • /D -days: 오늘을 기준으로 days일 이전의 파일을 대상으로 한다.
    • /D +days: 오늘을 기준으로 days일 이후의 파일을 대상으로 한다.

 

 

 

 

 

 

- 사용 예시

 

다음은 현재 경로 "logs" 디렉토리에서 최근 30일 동안 수정되지 않은 파일을 모두 삭제하는 목적의 스크립트이다.

 

@echo off
cd /d "%~dp0"

set "target_folder=logs"
set "cutoff_date=30"

forfiles /p "%target_folder%" /s /d -%cutoff_date% /c "cmd /c if @isdir==FALSE del @file"

 

 

  • @echo off : 콘솔에 현재 실행중인 명령을 표시하지 않도록 설정한다.
  • cd /d "%~dp0" : 현재 스크립트가 위치한 디렉토리로 작업 디렉토리를 변경한다. %~dp0가 현재 스크립트 파일의 경로를 나타낸다.
  • set "target_folder=logs" : target_folder 변수에 "logs"라는 값을 할당한다.
  • set "cutoff_date=30" : cutoff_date 변수에 "30"이라는 값을 할당한다.
  • forfiles /p "%target_folder%" /s /d -%cutoff_date% /c "cmd /c if @isdir==FALSE del @file" : forfiles 명령어는 파일이나 디렉토리를 검색하고 조건에 맞는 파일/디렉토리에 대해 특정 작업을 수행하는 데 사용하는 명령어로 특정 디렉토리에서 지정된 일수보다 오래된 파일을 삭제한다.
    • /p "%target_folder%" : 대상 디렉토리로 이동한다.
    • /s : 하위 디렉토리도 검색한다.
    • /d -%cutoff_date% : 지정된 일수 이전에 수정된 파일을 선택한다.
    • /c "cmd /c if @isdir==FALSE del @file" : 선택된 파일에 대해 실행할 명령을 정의한다. 여기서는 해당 파일이 디렉토리가 아니면 @isdir==FALSE 파일을 삭제하는 명령을 실행한다 del @file

 

 

 

단순히 일치하는 이름의 파일을 찾아 모두 삭제하려면 아래와 같이 할 수도 있다.

 

 

@echo off
set "directory=%~dp0"
for %%f in ("%directory%cache*.*") do del "%%f" /f /q

 

현재 디렉토리에서 cache*.* 이름의 파일 모두 삭제하기