오래된 파일을 삭제하는 배치 스크립트를 만들 때 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*.* 이름의 파일 모두 삭제하기
'운영체제 > Windows' 카테고리의 다른 글
윈도우 11 ] 한글 입력 도중 마지막 문자 지워지는 문제 해결 방법 (0) | 2024.05.16 |
---|---|
Windows 명령 프롬프트에서 리다이렉션과 파이프 사용 (0) | 2024.04.04 |
nssm 사용해서 배치파일을 Windows 서비스로 등록하기 (0) | 2023.12.27 |
Windows 작업 스케줄러 사용하여 배치파일 자동 실행하기 (0) | 2023.12.26 |
Windows 10 ] 네트워크 브리지 설정 (0) | 2023.11.22 |