파일명을 최신 날짜 파일에서 과거 날짜 파일순으로 나열해서 지정한 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