zhuk09
18-11-2015, 16:01
Добрый день!
Имеется скрипт удаления папок/подпапок и файлов.
'Переменные для настройки
NumOfDays = 1 'число дней, все что старше - будет удалено
StartFolderPath = "D:\Work\" 'Путь к папке с которой будет начинаться удаление файлов и папок
'Перехват и обработка ошибок
On Error Resume Next
Dim fso
Dim objFolder
Dim objFile
Dim objSubfolder
Set fso = CreateObject("Scripting.FileSystemObject")
Set objFolder = fso.GetFolder(StartFolderPath)
DeleteOldFilesAndFolders(objFolder)
'Функция рекурсивно удаляет старые файлы и пустые папки из переданной в параметре директории
Function DeleteOldFilesAndFolders(Folder)
'сначала удаляем все старые файлы в папке старше NumOfDays
for each objFile in Folder.Files
if DateDiff("d", objFile.DateLastModified, Now) > NumOfDays Then
objFile.Delete true
end if
next
'удаляем пустые директории
for each objSubfolder in Folder.Subfolders
if objSubfolder.Files.Count = 0 Then
objSubfolder.Delete true
end if
'Повторяем для подпапок
for each objSubfolderr in Folder.Subfolders
DeleteOldFilesAndFolders(objSubfolderr)
next
next
End Function
Но он работает не очень корректно. Объясняю суть:
Есть папка Work и в ней папки без файлов, подпапки без файлов, и в конечной папке находится файл который не попадает под условие удаления. Но данный скрипт все равно удаляет данные папки без файлов и подпаки без файлов и собственно конечную папку с файлом, который не должен удаляться.
1.Но если в корневую папку Work положить файл, который не удовлетворяет условиям удаления, то этот файл не удаляется, а все остальные удаляются.
2.Если в корневую папку Work положить файл, который не удовлетворяет условиям удаления, в папку первого уровня (111) так же положить файл не удовлетворяющий условиям удаления, а в папку второго уровня (222) положить файл удовлетворяющий условиям удаления (333), то удаляется только файл 333, а папка 222 не удаляется. И само собой не удаляется папка 111, т.к там находится файл, который не попадает под условия удаления.
Помогите доработать данный скрипт!
За ранее спасибо!
Имеется скрипт удаления папок/подпапок и файлов.
'Переменные для настройки
NumOfDays = 1 'число дней, все что старше - будет удалено
StartFolderPath = "D:\Work\" 'Путь к папке с которой будет начинаться удаление файлов и папок
'Перехват и обработка ошибок
On Error Resume Next
Dim fso
Dim objFolder
Dim objFile
Dim objSubfolder
Set fso = CreateObject("Scripting.FileSystemObject")
Set objFolder = fso.GetFolder(StartFolderPath)
DeleteOldFilesAndFolders(objFolder)
'Функция рекурсивно удаляет старые файлы и пустые папки из переданной в параметре директории
Function DeleteOldFilesAndFolders(Folder)
'сначала удаляем все старые файлы в папке старше NumOfDays
for each objFile in Folder.Files
if DateDiff("d", objFile.DateLastModified, Now) > NumOfDays Then
objFile.Delete true
end if
next
'удаляем пустые директории
for each objSubfolder in Folder.Subfolders
if objSubfolder.Files.Count = 0 Then
objSubfolder.Delete true
end if
'Повторяем для подпапок
for each objSubfolderr in Folder.Subfolders
DeleteOldFilesAndFolders(objSubfolderr)
next
next
End Function
Но он работает не очень корректно. Объясняю суть:
Есть папка Work и в ней папки без файлов, подпапки без файлов, и в конечной папке находится файл который не попадает под условие удаления. Но данный скрипт все равно удаляет данные папки без файлов и подпаки без файлов и собственно конечную папку с файлом, который не должен удаляться.
1.Но если в корневую папку Work положить файл, который не удовлетворяет условиям удаления, то этот файл не удаляется, а все остальные удаляются.
2.Если в корневую папку Work положить файл, который не удовлетворяет условиям удаления, в папку первого уровня (111) так же положить файл не удовлетворяющий условиям удаления, а в папку второго уровня (222) положить файл удовлетворяющий условиям удаления (333), то удаляется только файл 333, а папка 222 не удаляется. И само собой не удаляется папка 111, т.к там находится файл, который не попадает под условия удаления.
Помогите доработать данный скрипт!
За ранее спасибо!