Getting the Folder size for only subfolders, whist ignoring any other content?

Viewed 79

I’ve created the script below, which manages and maintains allocated storage within a RootFolder, into which are stored daily backups each within its sown individual folder, and should the RootFolder content exceed a preset limit, then the oldest backup folder is then deleted.

So far so good . . . the problem I have is that largeish files may also be added to the RootFolder [strHomeFolder] and as such are also included in the total accumulated 'size'. As a consequence the backup folders may be prematurely deleted, and in the worst case scenario all may be deleted altogether, which unfortunately may somewhat defeat the purpose of having backups !

I am therefore seeking advice in makeing the objFSO.GetFolder check only the contents of all of the backup Folders located within the RootFolder whilst ignoring any of the files at that level.

strOldestFolder = ""
dtmOldestDate = Now

Set oShell = CreateObject("WScript.Shell")
strHomeFolder = oShell.ExpandEnvironmentStrings("%USERPROFILE%\HDBackups")

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(strHomeFolder)

intFolderSize = Int((objFolder.Size / 1024) / 1024)

If intFolderSize >= 50 Then ' change as appropriate value in MBytes
    Set objSubFolders = objFolder.SubFolders
    For Each objFolder in objSubFolders
        strFolder = objFolder.Path
        dtmFolderDate = objFolder.DateCreated
        If dtmFolderDate < dtmOldestDate Then
            dtmOldestDate = dtmFolderDate
            strOldestFolder = strFolder
        End If
    Next
    objFSO.DeleteFolder(strOldestFolder)
End If
1 Answers

Just loop through the Root folder's SubFolders and sum up intFolderSize:

strOldestFolder = ""
dtmOldestDate = Now

Set objShell = CreateObject("WScript.Shell")
strHomeFolder = objShell.ExpandEnvironmentStrings("%USERPROFILE%\HDBackups")

Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(strHomeFolder)

Dim objSubFolder
intFolderSize = 0
For Each objSubFolder In objFolder.SubFolders
    intFolderSize = intFolderSize + objSubFolder.Size
Next

intFolderSize = Int((intFolderSize / 1024) / 1024)

If intFolderSize >= 50 Then ' change as appropriate value in MBytes
    Set objSubFolders = objFolder.SubFolders
    For Each objFolder In objSubFolders
        strFolder = objFolder.Path
        dtmFolderDate = objFolder.DateCreated
        If dtmFolderDate < dtmOldestDate Then
            dtmOldestDate = dtmFolderDate
            strOldestFolder = strFolder
        End If
    Next
    objFSO.DeleteFolder (strOldestFolder)
End If
Related