Windows

디렉토리 내의 특정 기간이 지난 파일 삭제 스크립트

채윤아빠 2009. 4. 11. 16:45
728x90
반응형



아래는 WSH 로 만든 스크립트로, 서버의 특정 디렉토리 아래의 있는 파일들 중에서 지정한 기간이 지난 파일을 삭제해주는 스크립트입니다.

아래 소스에서 45줄의 주석을 제거하셔야 실제 파일이 삭제됩니다. 현재는 주석으로 막아 놔서 메시지는 남지만 실제 파일이 삭제되지는 않습니다.

참고시시기 바랍니다.

Option Explicit

ON ERROR RESUME NEXT
Err.Clear

Dim strRootPath, nDays, nDeleteSubDir

nDays = 7
nDeleteSubDir = 0
If WScript.Arguments.Count = 0 Then
	WScript.Echo " 사용법 : cscript DeleteSubDirNFiles.vbs  [] [DEL_EMPTY_DIR=0]"
	Wscript.Quit(0)
End If

If WScript.Arguments.Count > 0 Then
	strRootPath = WScript.Arguments(0) ' 첫번째 파라미터 : 삭제할 파일이 들어 있는 디렉토리
End If
If WScript.Arguments.Count > 1 Then
	nDays = CInt(WScript.Arguments(1)) ' 두번째 파라미터 : 지정된 날짜가 지난 파일 삭제
End If
If WScript.Arguments.Count > 2 Then
	nDeleteSubDir = CInt(WScript.Arguments(2)) ' 세번째 파라미터 : 빈 하위 디렉토리를 삭제할 것인가? 0 - 삭제안함 / 1 - 삭제함
End If

If nDays = 0 Then
	WScript.Echo "오류: 두 번째 파라미터에 잘못된 값이 설정되었습니다."
	WScript.Echo "	두번째 파라미터는 삭제할 기준 범위 숫자 값(1이상)으로 지정한 숫자만큼의 이전 날짜의 지난 파일을 삭제처리하게 됩니다."
	Wscript.Quit(0)
End If

Dim oFSO
Set oFSO = CreateObject("Scripting.FileSystemObject")

Dim oFolder, oSubFolder
Set oFolder = oFSO.GetFolder(strRootPath)

DeleteSubDirNFiles oFolder, nDays, nDeleteSubDir

' 지정된 폴더의 파일 삭제
Public Sub DeleteFiles(oFolder, nDays, nDeleteSubDir)
	Dim oFile

	For Each oFile In oFolder.Files
		If Int(Now() - oFile.DateLastModified) >= nDays Then
			'oFile.Delete
			WScript.Echo oFile.Name  & " 'Deleted'"
		End If
	Next

End Sub

Public Sub DeleteSubDirNFiles(oFolder, nDays, nDeleteSubDir)
	Dim oSubFolder

	DeleteFiles oFolder, nDays, nDeleteSubDir ' 폴더내의 모든 파일 삭제

	' 지정한 루트 폴더에 포함된 서브 폴더의 삭제
	For Each oSubFolder In oFolder.SubFolders
		WScript.Echo "DeleteSubDir Enter : " & oSubFolder.name
		DeleteSubDirNFiles oSubFolder, nDays, nDeleteSubDir ' 재귀호출

		If nDeleteSubDir = 1 Then
			oSubFolders.Delete
		End If
	Next
End Sub