Const maxAge = 30 Const testMode = True Sub RecursiveDeleteByAge(ByVal strDirectory, maxAge) Dim objFolder, objSubFolder, objFile Set objFolder = objFSO.GetFolder(strDirectory) For Each objFile in objFolder.Files dlm = objFile.DateLastModified If DateDiff("d", dlm, Now) > maxAge Then wscript.echo "Deleting:" & objFile.Path If Not testMode = True Then objFile.Delete End If Exit For End If Next For Each objSubFolder in objFolder.SubFolders RecursiveDeleteByAge objSubFolder.Path, maxAge Next End Sub Sub RecursiveDeleteEmptyFolders(ByVal strDirectory) Dim objFolder, objSubFolder Set objFolder = objFSO.GetFolder(strDirectory) If objFolder.Files.Count = 0 Then If objFolder.SubFolders.Count = 0 Then ' no sub-folders beneath this folder... If Left(objFolder.Name,1) <> "~" Then wscript.echo "deleting " & objFolder.Path If Not testMode = True Then objFolder.Delete End If End If Else For Each objSubFolder in objFolder.SubFolders RecursiveDeleteEmptyFolders objSubFolder.Path Next End If Else wscript.echo "folder is not empty" For Each objSubFolder in objFolder.SubFolders RecursiveDeleteEmptyFolders objSubFolder.Path Next End If End Sub Dim objFSO Set objFSO = CreateObject("Scripting.FileSystemObject") RecursiveDeleteByAge "d:\downloads", maxAge RecursiveDeleteEmptyFolders "d:\downloads" wscript.echo "finished!"
Wednesday, January 26, 2011
Recursively Delete Old Files and Empty Folders
With a slight twist: The recursion to delete empty folders ignores folders with a name that begins with a tilde "~". You can modify the character or pattern to suit your demented whims.
Subscribe to:
Post Comments (Atom)
Thx for the handy script!
ReplyDeleteUnderneath version of 'RecursiveDeleteEmptyFolders' is slightly simpler, but does (as far as I can see and have tested) the same job.
Const testMode = True
Sub RecursiveDeleteEmptyFolders(ByVal strDirectory)
Dim objFolder, objSubFolder
Set objFolder = objFSO.GetFolder(strDirectory)
For Each objSubFolder in objFolder.SubFolders
RecursiveDeleteEmptyFolders objSubFolder.Path
Next
If objFolder.Files.Count = 0 Then
If objFolder.SubFolders.Count = 0 Then
' no sub-folders beneath this folder...
If Left(objFolder.Name,1) <> "~" Then
wscript.echo "deleting " & objFolder.Path
If Not testMode = True Then
objFolder.Delete
End If
End If
End If
End If
End Sub
Dim objFSO
Set objFSO = CreateObject("Scripting.FileSystemObject")
RecursiveDeleteEmptyFolders "d:\downloads"
wscript.echo "finished!"
KISS :-)
DeleteSet folderCollection = folder.SubFolders
For Each subFolder In folderCollection
'Looping through all subfolders...
DeleteOldFiles subFolder.Path, BeforeDate
If 0 = subFolder.Files.Count And 0 = subFolder.SubFolders.Count Then
iFolderCount = iFolderCount + 1
WScript.Echo "...Deleting FOLDER..." & """" & subFolder.Path & """"
subFolder.Delete True
End If
Next