(DOS 배치 프로그램 작성) 디렉토리의 특정 기간 파일 이외 삭제하기

DOS배치파일 작성 팁

파일명을 최신 날짜 파일에서 과거 날짜 파일순으로 나열해서 지정한 n세대 까지 최신파일을 제외하고 그 이후의 과거 파일 또는 디렉토리를 삭제하는 방법을 소개합니다.

TEST 대상 파일 준비

대상 디렉토리는 다음과 같습니다.

C:\>dir C:\log /O-N
2022-04-21 11:51  16 20220421_DAILY.log
2022-04-20 11:51  37 20220420_DAILY.log
2022-04-19 11:51  16 20220419_DAILY.log
2022-04-28 11:51  16 20220418_DAILY.log
2022-04-17 11:34  16 20220417_DAILY.log
2022-04-16 11:34  30 20220416_DAILY.log
2022-04-15 11:34  16 20220415_DAILY.log
2022-04-14 11:33  16 20220414_DAILY.log
2022-04-13 11:32  16 20220413_DAILY.log
2022-04-12 11:27  30 20220412_DAILY.log
2022-04-11 11:27  16 20220411_DAILY.log
2022-04-10 11:25  16 20220410_DAILY.log

dir 명령의 옵션 /O 파일을 정렬된 순서로 보여 주는 옵션입니다. N은 이름순(알파벳순)으로 정렬합니다. 기호 는 정렬 순서를 반대로 하는 접두사입니다. /O-N 결과 C:\log 디렉토리에 존재하는 모든 파일을 이름 역 순(알파벳 역 순)으로 정렬합니다.

명령 창에서 실행하기

다음 내용을 명령 프롬프트 창에서 실행 할 수 있습니다.

@echo off
SET TARGET_LOG_PATH=C:\log
SET ROTATION_DAYS=5
for /f "skip=%ROTATION_DAYS%" %F in ('dir %TARGET_LOG_PATH%\*_DAILY.log /B /O-N') do (
    del %TARGET_LOG_PATH%\%F 
)
dir %TARGET_LOG_PATH% /O-N

위 의 설명은 다음과 같습니다.

  • 환경변수 TARGET_LOG_PATH에 C:\log를 설정합니다.
  • 환경변수 ROTATION_DAYS에 5를 설정합니다.
  • skip=%ROTATION_DAYS%는 skip=5가 되어 dir %TARGET_LOG_PATH%\*_DAILY.log /B /O-N의 일람의 선두 5행을 제외하고 del %TARGET_LOG_PATH%\%F 가 실행됩니다. 참고로 dir명령의 /B옵션은 파일 명 만 표시합니다.

 제외된 선두 5행을 dir %TARGET_LOG_PATH% /O-N 명령으로 표시한 결과는 다음과 같습니다.

2022-04-21 11:51  16 20220421_DAILY.log
2022-04-20 11:51  37 20220420_DAILY.log
2022-04-19 11:51  16 20220419_DAILY.log
2022-04-28 11:51  16 20220418_DAILY.log
2022-04-17 11:34  16 20220417_DAILY.log

배치 파일로 실행하기

위의 내용을 다음과 같이 logrotation.bat파일 이름으로 저장합니다.

@echo off
SET TARGET_LOG_PATH=D:\log
SET TARGET_SAVE_N_DAY=5
for /f "skip=%ROTATION_DAYS%" %%F in ('dir %TARGET_LOG_PATH%\*_DAILY.log /B /O-N') do (
    del %TARGET_LOG_PATH%\%%F 
)
dir %TARGET_LOG_PATH% /O-N

주의) 변수명 %F는 명령 창에서 실행할 때와 달리 배치 파일로 작성할 때는 %%F로작성합니다.

logrotation.bat를 [명령 프롬프트] 창에서 실행하면 다음과 같습니다.

C:\>logrotation.bat
2022-04-21 11:51  16 20220421_DAILY.log
2022-04-20 11:51  37 20220420_DAILY.log
2022-04-19 11:51  16 20220419_DAILY.log
2022-04-28 11:51  16 20220418_DAILY.log
2022-04-17 11:34  16 20220417_DAILY.log
제목과 URL을 복사했습니다