Главная > WSH скрипты > Скрипт для бэкапа папки в rar-архив и удаления архивов старше N дней

Скрипт для бэкапа папки в rar-архив и удаления архивов старше N дней


17 апреля 2012. Разместил: dimon
Потребовался скрипт который будет архивировать определенную папку в rar-архив каждые десять минут.
Запуск скрипта планируется выполнять с помощью стороннего ПО (например - xStarter).
Перед тем как создать новый архив скрипт должен проверить наличие старых архивов и удалить файлы старше N дней.
Естественно скрип должен записывать свои действия в лог-файл.

Вот что у нас получилось:

'----------------------------------------------------------------------
'
' Copyright (c)  All rights reserved.
'
'
' AUTHOR: tudimon.com
' DATE: 17.04.2012
' NAME: backupFolder2rar_v1.vbs
'
' COMMENT:
'
' Каждые десять минут нужно упаковывать папку в Rar-архив.
' Архивы старше N суток нужно удалять.
'
' Запуск скрипта каждые десять минут планируется с помощью стороннего ПО.
'
' Rar.exe должен лежать в той же папке что и скрипт.
'
'----------------------------------------------------------------------

' Задаваемые параметры для работы скипта

DataFolder = "C:\1\data"                 ' Папка с файлами для архиврования (без слэша на конце)
BackupFolder = "C:\backup"                 ' Папка для архивных копий (без слэша на конце)

N = 2                                    ' Кол-во суток свыше которых файл считается устаревшим

LogFilePath = "c:\1\log_backup.log"        ' лог-файл
LogTXT = ""                             ' переменная для записи в лог

FlagDel = 0                                ' Флаг что хотя бы один файл был удален

'----------------------------------------------------------------------

LogTXT = LogTXT & vbNewLine & "******************** " & Now & " ********************"

' **** Удаляем "устаревшие" файлы

Set objFSO = CreateObject("Scripting.FileSystemObject")

' Вычислим дату
olddate = DateAdd("d", -N, date)
LogTXT = LogTXT & vbNewLine & "Date limit " & olddate

' Проверяем даты создания файлов в папке с бэкапами
Set folder = objFSO.GetFolder(BackupFolder)
Set fc = folder.Files
For Each f1 in fc
    If f1.DateLastModified < olddate Then
        LogTXT = LogTXT & vbNewLine & "Delete file " & f1.name & " (DateLastModified = " & f1.DateLastModified & ")"
        objFSO.deletefile(f1)
        FlagDel = 1
    End If
Next

' Если ни один файл не был удален запишем это в лог
If FlagDel = 0 Then
    LogTXT = LogTXT & vbNewLine & "There are no files to delete!"
End If

' **** Бэкапим папку

' сформируем штамп со временем бэкапа
DateTimeStamp = Year(now) & Right("00" & CStr(Month(Now)), 2) & Right("00" & CStr(Day(Now)), 2) & "_"  & Right("00" & CStr(Hour(Now)), 2) & "-"  & Right("00" & CStr(Minute(Now)), 2) & "-"  & Right("00" & CStr(Second(Now)), 2)

' Сформируем команду для RAR-а
cmd = "rar.exe a -r -w" & BackupFolder &"\tmp "& BackupFolder & "\backup_" & DateTimeStamp &".rar " & DataFolder

' выполним
Set objShell = CreateObject("WScript.Shell")
Set objScriptExec = objShell.Exec(cmd)

LogTXT = LogTXT & vbNewLine & "Create file " & "backup_" & DateTimeStamp &".rar"


' **** Пишем лог
Set FSO = CreateObject("Scripting.FileSystemObject")
Set LogFile = FSO.OpenTextFile(LogFilePath, 8, True)
LogTXT = LogTXT & vbNewLine & "*************************************************************"
LogFile.WriteLine LogTXT
LogFile.Close

Set FSO = Nothing
Set objFSO = Nothing

WScript.Quit 0


backupfolder2rar_v1.rar [145,45 Kb] (cкачиваний: 293)


Если необходимо наблюдать прогресс упаковки, то вместо rar.exe нужно использовать winrar.exe - будет видно окошко с процентом выполнения архивирования, все ключи консольной версии rar работают и с обычной.

Вернуться назад