Получить размер папки только для подпапок, вист игнорируя любой другой контент? - PullRequest
2 голосов
/ 13 октября 2019

Я создал нижеприведенный скрипт, который управляет и поддерживает выделенное хранилище в RootFolder, в котором хранятся ежедневные резервные копии, каждая из которых находится в отдельной посеянной папке, и если содержание RootFolder превышает заданный предел, тогда самая старая папка резервной копиизатем удалил.

Пока все хорошо. ,,у меня проблема в том, что файлы большого размера также могут быть добавлены в RootFolder [strHomeFolder] и, как таковые, также включены в общий накопленный «размер». Как следствие, папки для резервных копий могут быть преждевременно удалены, и в худшем случае все могут быть удалены полностью, что, к сожалению, может несколько отменить цель создания резервных копий!

Поэтому я ищу совет при создании objFSO. GetFolder проверяет только содержимое всех резервных папок, расположенных в RootFolder, игнорируя при этом любые файлы на этом уровне.

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 Ответ

2 голосов
/ 14 октября 2019

Просто переберите SubFolders в корневой папке и подведите итог 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...