Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » В помощь системному администратору » Автоматическое удаление папок и файлов старше x дней

Модерирует : lynx, Crash_Master, dg, emx, ShriEkeR

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

magiogre



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Помогите написать vbs-скрипт, который будет сканировать папку и удалять из неё все файлы и папки старше x-дней.
 
 
 
 

Всего записей: 104 | Зарегистр. 26-01-2009 | Отправлено: 11:52 12-05-2010
tyghr



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
сам недавно писал:
 
описание:
Удаляет старые бэкапы, (только RAR!!!!!!, если надо и другие расширения, поправь сам)
рядом с vbs должны лежать!!
   файл логов delold.log
   файл настроек delold.ini
 
настройки в ini:
foldbackup - путь к папке
termdate - интервал дней хранения, после которого удаляются архивы
except - названия папок, которые не надо сканировать (исключения)
 
пример ini:
   foldbackup=\\srv-storage\BACKUP
   termdate=30
   except=desktop
   except=site
 
 
сам vbs ^ ^

Код:
 
dim fso, foldback, termdate, except()
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Const TristateUseDefault = -2, TristateTrue = -1, TristateFalse = 0
Set objShell = WScript.CreateObject("WScript.Shell")
Set fso = CreateObject("Scripting.FileSystemObject")
set Locator = createobject("wbemscripting.swbemlocator")
Set ServicesSet = locator.connectserver("","\root\cimv2")
 
foldpath = objShell.CurrentDirectory
inipath=foldpath & "\delold.ini"
logpath=foldpath & "\delold.log"
Set f = fso.GetFile(inipath)
Set flog = fso.GetFile(logpath)
 
Set ts = f.OpenAsTextStream(ForReading, TristateUseDefault)
excount=0
Do Until ts.AtEndOfStream
    templine = ts.ReadLine
    if mid(templine,1 ,6)="except" then excount=excount + 1
Loop
redim except(excount)
ts.Close
 
Set ts = f.OpenAsTextStream(ForReading, TristateUseDefault)
exnumber=1
Do Until ts.AtEndOfStream
    templine = ts.ReadLine
    select case mid(templine,1,6)
    case "foldba"
        if len(templine)>11 then foldback = mid(templine,12,len(templine)-11)
    case "termda"
        if len(templine)>9 then termdate = int(mid(templine,10,len(templine)-9))
    case "except"
        if len(templine)>7 then except(exnumber)= mid(templine,8,len(templine)-7) : exnumber = exnumber + 1
    end select
Loop
ts.Close
 
Set tslog = flog.OpenAsTextStream(ForAppending, TristateUseDefault)
currtime = Now()
tslog.writeline "-------------" & currtime & "--------------"
gofolder(foldback)
tslog.writeline "----------------------------------------------"
tslog.close
 
Set flog = Nothing
Set f = Nothing
set servicesset = nothing
set locator = nothing
set fso = nothing
set objshell = nothing
 
Private Sub GoFolder(ByVal fldSTR)
    on error resume next
    Dim fldRUN
    Dim fldSUB
    Dim Raschir
    set fldRUN = fso.GetFolder(fldSTR)
    for i=1 to excount
        if lcase(fldRUN.name) = except(i) then exit sub
    next
    For Each fldSUB In fldRUN.SubFolders
            GoFolder fldSUB
        Next
        For Each fileSUB In fldRUN.Files
        raschir=""
            Raschir = Mid(fileSUB.Name, Len(fileSUB.Name) - 2, 3)
            If Raschir = "rar" Then  
        If (currtime - fileSUB.DateLastModified) > termdate Then
            tslog.writeline fileSUB.path
            fso.DeleteFile (fileSUB.path)
        end if
        end if
        Next
End Sub

Всего записей: 89 | Зарегистр. 14-03-2007 | Отправлено: 12:15 12-05-2010
magiogre



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Мне бы попроще, чтобы скрипт тупо удалял все файлы и папки, в т.ч. подпапки, которые старше х дней.
(Нужно зачищать папку, которую пользователи используют для обмена данными.)

Всего записей: 104 | Зарегистр. 26-01-2009 | Отправлено: 12:29 12-05-2010
vlary



Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Программирование "удобняшек" на VBScript

Всего записей: 17278 | Зарегистр. 13-06-2007 | Отправлено: 13:44 12-05-2010
Serg41

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
у меня так работает много лет, взял тоже с форума, удаляет файлы старше N дней
сделай файл *.vbs и смотри
 
Option Explicit
Dim fso, dTwoDaysAgo
dTwoDaysAgo = Date() - 16
Set fso = CreateObject("Scripting.FileSystemObject")
 
DirWalk("c:\backup\")
 
Sub DirWalk(parmPath)
Dim oSubDir, oSubFolder, oFile, n
 
   On Error Resume Next          
   Set oSubFolder = fso.getfolder(parmPath)
   For Each oFile In oSubFolder.Files    
      If Err.Number <> 0 Then    
         Err.Clear
      ElseIf oFile.DateLastModified < dTwoDaysAgo Then
             fso.DeleteFile oFile.Path, True
      End If
   Next
 
   For Each oSubDir In oSubFolder.Subfolders
      DirWalk oSubDir.Path      
   Next
   On Error Goto 0              
End Sub

Всего записей: 77 | Зарегистр. 18-09-2006 | Отправлено: 14:40 12-05-2010
magiogre



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Спасибо! Оба варианта отлично работают!

Всего записей: 104 | Зарегистр. 26-01-2009 | Отправлено: 22:32 12-05-2010
IgorOhrimenko

Junior Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
 
   For Each oSubDir In oSubFolder.Subfolders  
      DirWalk oSubDir.Path        
   Next  
 

Немного дополнив этот цикл можно удалять пустые папки.
 
 For Each oSubDir In oSubFolder.SubFolders  
        DirWalk oSubDir.Path
        If oSubDir.Size = 0 Then
            oSubDir.Delete True
        End If
   Next  

Всего записей: 55 | Зарегистр. 09-10-2008 | Отправлено: 15:22 03-11-2010
zvcom



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Еще можно задачу решить с помощью команды forfiles.
Вот пример удаляющий файлы в каталоге D:\Folder\ старше 7-ми дней с логированием:
 

Код:
 
rem Удалять файлы, старше дней
  set Days=7
rem путь к файлам
  set Path="D:\Folder\"
 
forfiles  /p %Path% /m *.log /d -%Days% /c "CMD /C echo @PATH .. @fdate .. @fsize && del @PATH"
 
 

Всего записей: 32 | Зарегистр. 13-04-2003 | Отправлено: 12:24 15-11-2010
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Компьютеры » В помощь системному администратору » Автоматическое удаление папок и файлов старше x дней


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru