Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Удаление старых файлов и папок (http://forum.oszone.net/showthread.php?t=283180)

Ua-life 05-06-2014 09:48 2360201

Удаление старых файлов и папок
 
Добрый день, есть очень клевый скрипт для удаление старых файлов
читать дальше »
Код:

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 2360209

Цитата:

Цитата Ua-life
очень клевый скрипт »

Я бы не сказал.

Цитата:

Цитата Ua-life
а я бы очень хотел, что бы он удалял и папки созданные ранее указанного периода. »

…вместе со свежими файлами :lol:.

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

Ua-life 05-06-2014 10:24 2360214

Цитата:

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

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

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

Iska 05-06-2014 15:50 2360370

Цитата:

Цитата Ua-life
Сейчас удаляет файлы созданные 30 дней назад, но папки в которых находились файлы созданные 30 дней назад не удаляет, вот мне нужно, что бы и папки удалялись »

Не нужно. Удалять потребно лишь пустые папки.

Цитата:

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

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

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 2360378

к сожалению пишет что мол objFSO переменная не определена

Iska 05-06-2014 16:34 2360399

Подправил код в предыдущем посте.

Ua-life 05-06-2014 16:45 2360405

Цитата:

Цитата Ua-life
к сожалению пишет что мол objFSO переменная не определена »

мастер, что тут сказать, все работает, задача решена, прибольшое спасибо за потраченное на меня время. Закрывайте тему.


Время: 00:35.

Время: 00:35.
© OSzone.net 2001-