Войти

Показать полную графическую версию : [решено] Удаление старых файлов и папок


Ua-life
05-06-2014, 09:48
Добрый день, есть очень клевый скрипт для удаление старых файлов
path = "D:\BackUp"
killdate = date() - 30

arFiles = Array()
set fso = createobject("scripting.filesystemobject")

SelectFiles path, killdate, arFiles, true

nDeleted = 0
for n = 0 to ubound(arFiles)
on error resume next
arFiles(n).delete true
if err.number <> 0 then
wscript.echo "Не возможно удалить: " & arFiles(n).path
else
nDeleted = nDeleted + 1
end if
on error goto 0
next

msgbox nDeleted & " из " & ubound(arFiles)+1 _
& " файлы были удалены с папки D:\BackUp"


sub SelectFiles(sPath,vKillDate,arFilesToKill,bIncludeSubFolders)
on error resume next
set folder = fso.getfolder(sPath)
set files = folder.files

for each file in files
dtlastmodified = null
on error resume Next
dtlastmodified = file.datelastmodified
on error goto 0
if not isnull(dtlastmodified) Then
if dtlastmodified < vKillDate then
count = ubound(arFilesToKill) + 1
redim preserve arFilesToKill(count)
set arFilesToKill(count) = file
end if
end if
next

if bIncludeSubFolders then
for each fldr in folder.subfolders
SelectFiles fldr.path,vKillDate,arFilesToKill,true
next
end if
end sub
но он удаляет только файлы находившееся по указанному пути, а я бы очень хотел, что бы он удалял и папки созданные ранее указанного периода.

Помогите, будьте добры строчкой...

Iska
05-06-2014, 10:16
очень клевый скрипт »
Я бы не сказал.

а я бы очень хотел, что бы он удалял и папки созданные ранее указанного периода. »
…вместе со свежими файлами :lol:.

P.S. И почему «созданными»? В скрипте используется дата последней модификации «.DateLastModified» (что есть более правильно)?!

Ua-life
05-06-2014, 10:24
P.S. И почему «созданными»? В скрипте используется дата последней модификации «.DateLastModified» (что есть более правильно)?! »
возможно не правильно выразился, не очень владею могучим.
Сейчас удаляет файлы созданные 30 дней назад, но папки в которых находились файлы созданные 30 дней назад не удаляет, вот мне нужно, что бы и папки удалялись

Я же прошу не критиковать то, что написано в скрипте, автор не я, а всего лишь прошу помочь достичь желаемого результата ))

Iska
05-06-2014, 15:50
Сейчас удаляет файлы созданные 30 дней назад, но папки в которых находились файлы созданные 30 дней назад не удаляет, вот мне нужно, что бы и папки удалялись »
Не нужно. Удалять потребно лишь пустые папки.

Я же прошу не критиковать то, что написано в скрипте, автор не я, а всего лишь прошу помочь достичь желаемого результата )) »
Для очистки я много лет как пользую свой. В Вашем варианте может выглядеть примерно так (не проверялось):
Option Explicit

Const intDays2Live = 30
Const strPathToClear = "D:\BackUp"


With WScript.CreateObject("Scripting.FileSystemObject")
If .FolderExists(strPathToClear) Then
ClearSubFolders .GetFolder(strPathToClear)
Else
WScript.Quit 1
End If
End With

WScript.Quit 0
'=============================================================================

'=============================================================================
Sub ClearSubFolders(objFolder)
Dim objSubFolder
Dim objFile


For Each objSubFolder In objFolder.SubFolders
ClearSubFolders objSubFolder
Next

For Each objFile In objFolder.Files
If DateDiff("d", objFile.DateLastModified, Now()) > intDays2Live Then
objFile.Delete(True)
End If
Next

If (objFolder.Files.Count = 0) And (objFolder.SubFolders.Count = 0) Then
If objFolder.Path = strPathToClear Then
' Nothing to do
Else
objFolder.Delete True
End If
End If
End Sub
'=============================================================================

Ua-life
05-06-2014, 15:59
к сожалению пишет что мол objFSO переменная не определена

Iska
05-06-2014, 16:34
Подправил код в предыдущем посте.

Ua-life
05-06-2014, 16:45
к сожалению пишет что мол objFSO переменная не определена »
мастер, что тут сказать, все работает, задача решена, прибольшое спасибо за потраченное на меня время. Закрывайте тему.




© OSzone.net 2001-2012