주변 지인과 가족의 컴퓨터 문제를 해결해 준 시간이 적지 않은데, 그중에서 가장 자주 마주치는 문제가 바로 임시 파일과 로그 파일입니다. 이런 파일들이 디스크 공간을 계속 잠식하다가 결국 시스템 전체를 느리게 만드는 경우가 허다합니다.
인터넷 임시 파일 폴더가 대표적인 원인이지만, 이것은 비교적 해결이 쉽습니다. 제어판의 인터넷 옵션에서 파일을 자동 삭제하도록 설정해 두면 되기 때문입니다. 문제는 그 외의 곳들입니다. 성질 고약한 Windows 임시 폴더나, 쓸모없는 데이터를 끝없이 쌓아두는 각종 애플리케이션 로그 파일들은 어떻게 해야 할까요? 처음에는 별문제 없어 보여도 시간이 지나면 아무 쓸모 없는 오래된 파일이 산더미처럼 쌓이게 됩니다.
잘 만든 프로그램이라면 필요 없어진 로그나 임시 파일을 스스로 삭제하지만, 뒷정리를 제대로 하지 않는 프로그램도 너무 많습니다. 그 결과 몇 년이 지난 컴퓨터는 온통 찌꺼기 파일 천지가 되곤 합니다. 다행히 Windows 임시 폴더든 백신 알림 로그 폴더 같은 특정 로그 폴더든 경로를 알고 있다면, 다음에 소개하는 Windows 스크립트로 며칠보다 오래된 로그 파일을 주기적으로 정리할 수 있습니다.
Windows 스크립트로 임시 파일 정리하기
Windows 스크립팅이 처음이라면 예전에 작성한 WSH 튜토리얼을 먼저 살펴보시기 바랍니다. Windows 스크립트를 활용하면 네트워크 설정 변경이나 백신·악성코드 검사 자동 예약처럼 다양한 작업을 처리할 수 있습니다.
애플리케이션 로그 파일이나 임시 파일 폴더를 주기적으로 관리하는 정리 루틴을 만들고 싶다면, Windows 스크립트가 확실한 해답입니다.
정리용 Windows 스크립트 작성하기
이 스크립트는 하나의 특정 디렉터리를 대상으로 수정 날짜가 며칠보다 오래된 파일을 전체적으로 검색합니다. 해당 파일은 모두 삭제하고, 이어서 모든 하위 디렉터리를 순회하며 동일한 검사와 정리를 반복 수행합니다. 복잡하게 들리나요? 전혀 아닙니다. 스크립트의 첫 부분은 다음과 같습니다.
Option Explicit
On Error Resume Next
Dim oFSO, oFolder, sDirectoryPath
Dim oFileCollection, oFile, sDir
Dim iDaysOld
iDaysOld = 3
이 부분은 디렉터리와 정리 대상 파일에 접근하기 위한 파일 시스템 변수를 선언합니다. "iDaysOld" 변수는 보관할 파일의 기준 나이를 스크립트에 알려주는 값으로, 여기서는 3일보다 최신인 파일은 모두 유지하도록 설정했습니다.
다음은 아주 단순한 정리 구간입니다.
' ***** CLEAR OUT OLD FILES IN LOG FOLDER *****
sDirectoryPath = "C:\Users\Owner\AppData\Local\Temp\"
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oFolder = oFSO.GetFolder(sDirectoryPath)
Set oFileCollection = oFolder.Files
For each oFile in oFileCollection
If oFile.DateLastModified < (Date() - iDaysOld) Then
oFile.Delete(True)
End If
Next
위 코드는 Windows 파일 시스템에 연결한 후, "sDirectoryPath" 변수로 지정한 디렉터리에 접근합니다. 첫 번째 루프는 디렉터리 내 개별 파일을 하나씩 확인하며 수정 날짜를 지정한 기준과 비교하고, 3일보다 오래된 파일은 삭제합니다.
파일에는 잘 작동하지만, Windows 임시 폴더처럼 하위 디렉터리가 많은 경우에는 어떻게 할까요? 스크립트의 다음 구간이 모든 하위 디렉터리를 순회하며 그 안의 파일에도 동일한 작업을 수행합니다.
For Each oSubFolder In oSubFolders
sDirectoryPath = "C:\Users\Owner\AppData\Local\Temp\" & oSubFolder
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oFolder = oFSO.GetFolder(sDirectoryPath)
Set oFileCollection = oFolder.Files
For each oFile in oFileCollection
If oFile.DateLastModified < (Date() - iDaysOld) Then
oFile.Delete(True)
End If
Next
If oSubFolder.Size = 0 Then oSubFolder.Delete(True)
Set oFSO = Nothing
Set oFolder = Nothing
Set oFileCollection = Nothing
Set oFile = Nothing
Next
마지막으로, 하위 디렉터리가 아예 없는 경우를 대비해 객체들을 초기화하는 것도 잊지 마세요.
Set oFSO = Nothing
Set oFolder = Nothing
Set oFileCollection = Nothing
Set oFile = Nothing
WScript.Quit
정말 간단하죠? 위 스크립트는 정리하고 싶은 어떤 폴더든 처리할 수 있습니다. 주기적으로 관리할 디렉터리마다 개별 스크립트를 작성하고, "sDirectoryPath"에 해당 경로를 지정한 뒤 "C:\temp\"나 "c:\vbscripts\" 같은 폴더에 저장하세요. 스크립트가 준비되었다면 이제 예약 실행 차례입니다.
정리 스크립트 예약 실행하기
Windows 7에서 정리 스크립트를 예약하려면 관리 도구(Administrative Tools)로 이동해 작업 스케줄러(Task Scheduler)를 엽니다.

[동작] 메뉴에서 [기본 작업 만들기]를 선택합니다.

그다음 디렉터리를 정리하고 싶은 주기에 맞춰 반복 일정을 설정합니다. 필자의 경우 보통 컴퓨터 앞에 있는 일요일 정오에 정리 스크립트가 실행되도록 했는데, 스크립트는 그냥 백그라운드에서 조용히 돌아갑니다.

각 로그 또는 임시 디렉터리를 정리하는 Windows 스크립트마다 예약 작업을 하나씩 만들어야 한다는 점을 기억하세요.

작업 스케줄러에서 스크립트를 등록한 뒤 테스트하려면 [동작]을 클릭한 다음 [실행]을 누르면 됩니다.

그러면 해당 로그나 임시 폴더에서 며칠(또는 스크립트에서 설정한 기준)보다 오래된 파일들이 자동으로 삭제되는 것을 확인할 수 있습니다. 필자는 Windows 임시 폴더를 매주 정리하는데, 스크립트 실행 후 폴더 안 45개 정도였던 파일이 하위 디렉터리 파일까지 포함해 최신 파일 20개 남짓으로 줄어들었습니다.

컴퓨터 관리는 정말 번거로운 일입니다. 게다가 시스템과 각종 애플리케이션이 끊임없이 로그 파일을 기록하거나 Windows 임시 폴더에 찌꺼기 파일을 쌓는다면 더욱 힘들어집니다. 이 스크립트는 서버에서 배치 작업이나 스크립트를 실행할 때마다 새 로그 파일이 생성되는 환경의 IT 담당자에게 특히 유용합니다. 오래된 로그 파일을 주기적으로 정리하는 Windows 스크립트를 운영하면, 위와 같은 WSF 파일로 로그 디렉터리를 깔끔하게 유지할 수 있습니다. 필요한 로그 기록은 보관하면서, 불필요한 아주 오래된 파일만 골라 정리하는 것이죠.
이런 스크립트의 창의적인 활용법이 생각나시나요? 임시 폴더와 로그 파일을 수동으로 정리하고 계셨다면, 이런 스크립트가 작업을 덜어줄 수 있을 것 같으신가요? 직접 사용해 보시고 아래 댓글로 의견과 피드백을 나눠주세요!
이미지 출처: Crane at Junk Yard via Shutterstock