'=====================================
'А такой вариант. Если кому будет интересно.
'=====================================
' Дата последнего изменения: 02.09.2010
' Орлов В.И. icq:5279603
On Error Resume Next
dim FSO, ListBackUp, FileIni, StrLine, LogFile, FileLog, n, ddays, NameType, DateNow, TimerScript, TimerEnd, LogAll, pathPostie, sabj, MailBox
dim Arr1
Set FSO = CreateObject("Scripting.FileSystemObject")
Set WshShell = WScript.CreateObject("WScript.Shell")
ListBackUp = "\\ArchServer\d$\backUp\ListBackUp.ini" ' путь к файлу настроек архивации
FileLog = "\\ArchServer\d$\backUp\BackUp.log" ' Логфайл - статистика выполнения задач
MailBox = "webadmin@domen.lan" ' почтовый ящик куда посылать отчет
sabj = "BackUp process on PDC from " & now ' тема письма отчета
mailServer = "mailserver.domen.lan" ' почтовый сервер для отправки отчета
mailFrom = "backup@domen.lan" ' от имени кого посылать отчет
pathPostie = "\\ArchServer\d$\backup\postie.exe" ' путь к файлу postie.exe (488Kb(499712b), MD5="0729727ADFF28F14E0112FE82565CD6A", CRC32="24E3BC27")
n = 1 ' подсчет номера строки в файле ностроек архивации
LogAll = "" ' сбор отчета для отправки по почте
DateNow = now ' текущая дата :)
TimerScript = Timer ' подсчет выполнения скрипта (фиксация текущего момента времени)
' начало скрипта ' запись в лог-----------------------------------------
Log("| ")
Log("| ")
Log("============ Начало архивации: " & Date & " " & Time)
If FSO.FileExists(ListBackUp) Then
' читаем файл INI
Set fileini = fso.OpenTextFile(ListBackUp, 1, false)
Do while Not fileini.AtEndOfStream
StrLine = fileini.ReadLine()
' проверка на комментарий
if left(trim(StrLine),1) = "#" or trim(StrLine) = "" then
else
' разделяем строку по пробелу на массив из 4 полей
Arr1 = split(StrLine, " ")
' Проверяем количество параметров
if ubound(Arr1) < 3 then
Log(Date & " " & Time)
Log("!!! Ошибка !!! Некорректная запись параметров >>" & StrLine & "<< в строке №:" & n & " файла " & ListBackUp)
Log(" Запись должна иметь вид:")
Log(" <Переодичность><пробел><Что архивировать><пробел><Куда архивировать><пробел><Тип архиваци{normal|copy|differential|incremental|daily}>")
else
' проверяем правильность пути "ЧТО"
If FSO.FolderExists(Arr1(1)) = False Then
Log(Date & " " & Time)
Log("!!! Ошибка !!! Не найден путь: """ & Arr1(1) & """ В строке №:" & n & " файла " & ListBackUp)
Log(" Архивация не произведена.")
else
' проверяем правильность пути "КУДА"
If FSO.FolderExists(Arr1(2)) = False Then
Log(Date & " " & Time)
Log("!!! Ошибка !!! Не найден путь: """ & Arr1(2) & """ В строке №:" & n & " файла " & ListBackUp)
Log(" Архивация не произведена.")
else
' проверяем правильность типа
' Тип может быть один из {normal|copy|differential|incremental|daily}
if Arr1(3) <> "normal" and Arr1(3) <> "copy" and Arr1(3) <> "differential" and Arr1(3) <> "incremental" and Arr1(3) <> "daily" then
Log(Date & " " & Time)
Log("!!! Ошибка !!! Не правильно указан тип архивации: """ & Arr1(3) & """ В строке №:" & n & " файла " & ListBackUp)
Log(" Архивация не произведена.")
else
NameType = Left(trim(Arr1(3)),4)
if LCase(Arr1(3)) = "normal" then
NameType = "Full"
end if
'Проверяем переодичность
if LCase(Left(trim(Arr1(0)),1)) = "d" or LCase(Left(trim(Arr1(0)),1)) = "n" or LCase(Left(trim(Arr1(0)),1)) = "m" then
if len(trim(Arr1(0))) >= 2 then
' Запуск архивации
' проверяем период
if LCase(Left(trim(Arr1(0)),1)) = "d" then ' ежедневная архивация
if mid(trim(Arr1(0)),2,1) = "*" then ' каждый день
NameType = NameType & "_d_" & Trim(Day(DateNow)) & "_" & Left(Trim(MonthName(Month(DateNow))),3) & "_" & Trim(year(DateNow))
GoArch Arr1, NameType
else
ddays = split(mid(trim(Arr1(0)),2,len(trim(Arr1(0)))-1),":")
for i=0 to ubound(ddays)
if trim(ddays(i)) = trim(Day(DateNow)) then
NameType = NameType & "_d_" & Trim(Day(DateNow)) & "_" & Left(Trim(MonthName(Month(DateNow))),3) & "_" & Trim(year(DateNow))
GoArch Arr1, NameType
Exit for
end if
next
end if
end if
if LCase(Left(trim(Arr1(0)),1)) = "n" then ' еженедельная архивация
if mid(trim(Arr1(0)),2,1) = "*" and trim(Weekday(DateNow)) = 7 then
NameType = NameType & "_n_" & Left(Trim(WeekDayName(WeekDay(DateNow))),3)
GoArch Arr1, NameType
else
ddays = split(mid(trim(Arr1(0)),2,len(trim(Arr1(0)))-1),":")
for i=0 to ubound(ddays)
if trim(ddays(i)) = trim(Weekday(DateNow)) then
NameType = NameType & "_n_" & Left(Trim(WeekDayName(WeekDay(DateNow))),3)
GoArch Arr1, NameType
Exit for
end if
next
end if
end if
if LCase(Left(trim(Arr1(0)),1)) = "m" then ' ежемесячная архивация
if mid(trim(Arr1(0)),2,1) = "*" and trim(Day(DateNow)) = 1 then
NameType = NameType & "_m_" & Left(Trim(MonthName(Month(DateNow))),3)
GoArch Arr1, NameType
else
ddays = split(mid(trim(Arr1(0)),2,len(trim(Arr1(0)))-1),":")
for i=0 to ubound(ddays)
if trim(ddays(i)) = trim(Month(DateNow)) and trim(Day(DateNow)) = 1 then
NameType = NameType & "_m_" & Left(Trim(MonthName(Month(DateNow))),3)
GoArch Arr1, NameType
Exit for
end if
next
end if
end if
else
Log(" Не правильно указан период """ & Arr1(0) & """ в строке № " & n & " файла " & ListBackUp) '-----------------
end if
else
Log(" Не правильно указан период """ & Arr1(0) & """ в строке № " & n & " файла " & ListBackUp) '--------------------
end if
end if
end if
end if
end if
end if
n = n + 1
Loop
else
Log(" !!! не найден INI файл !!! """ & ListBackUp & """")
end if
' max Timer = 86400
TimerEnd = timer
if TimerEnd > TimerScript then
TimerScript = TimerEnd - TimerScript
elseif TimerEnd = TimerScript then
TimerScript = 0
else
TimerScript = 86400 - TimerScript + TimerEnd
end if
' время выполнения скрипта
TimerScript = int(split(trim(round(TimerScript/60/60,2)), ",")(0)) & " ч. " & int(Split(round(TimerScript/60,2),",")(0))-int(split(trim(round(TimerScript/60/60,2)), ",")(0))*60 & " мин. " & int(split(TimerScript, ",")(0)) - int(split(trim(round(TimerScript/60/60,2)), ",")(0))*60*60 - (int(Split(round(TimerScript/60,2),",")(0))-int(split(trim(round(TimerScript/60/60,2)), ",")(0))*60)*60 & " сек. " & int(split(round(TimerScript+0.01,3),",")(1)) & " мсек."
'TimerScript = int(split(trim(round(TimerScript/60/60,2)), ",")(0)) & " ч. " & int(Split(round(TimerScript/60,2),",")(0))-int(split(trim(round(TimerScript/60/60,2)), ",")(0))*60 & " мин. " & int(split(TimerScript, ",")(0)) - int(split(trim(round(TimerScript/60/60,2)), ",")(0))*60*60 - (int(Split(round(TimerScript/60,2),",")(0))-int(split(trim(round(TimerScript/60/60,2)), ",")(0))*60)*60 & " сек. "
Log("============ Конец архивации: " & now & ", Общая длительность: " & TimerScript)
'============================
pathPostie = pathPostie & " -host:" & mailServer & " -port:25 -to:" & MailBox & " -from:" & mailFrom & " -s:""" & sabj & """ -msg:""" & LogAll & """"
' pathPostie = pathPostie & " -host:" & mailServer & " -port:25 -to:" & MailBox & " -from:" & mailFrom & " -s:""" & sabj & """ -msg:""" & LogAll & """"
return = WshShell.Run(pathPostie,0,True)
if err.number = 0 then
Log("Результаты архивации отправлены на почту: " & MailBox & chr(10) & "return:" & return)
else
Log("!!! ВНИМАНИЕ !!! Ошибка отправки сообщения !!! скрипт:" & wscript.scriptfullname & chr(10) & "return:" & return)
end if
'============================
Log("| ")
Log("| ")
fileini.close
set fileini = Nothing
set FSO = Nothing
Set WshShell = Nothing
Set objFile = Nothing
set ts = Nothing
WScript.Quit
sub GoArch(GoArr, NameType)
dim rtime, rt
rtime = timer
Log(" " & now & chr(9) & "Начало " & chr(9) & NameType & "_" & ansv(GoArr(1)))
' Начало запись в лог ------------------------------
str1 = "ntbackup backup """ & GoArr(1) & """ /v:no /r:no /rs:no /hc:off /m " & GoArr(3) & " /j """ & ansv(GoArr(1)) & """ /l:s /f """ & GoArr(2) & NameType & "_" & ansv(GoArr(1)) & ".bkf"""
' Log(" " & str1)
return = WshShell.Run(str1,0,True)
' Log(" ntbackup вернул: " & return)
Set objFile = FSO.GetFile(GoArr(2) & NameType & "_" & ansv(GoArr(1)) & ".bkf")
rt = timer
if rt > rtime then
rt = rt - rtime
elseif rt = rtime then
rt = 0
else
rt = 86400 - rtime + rt
end if
rtime = int(split(trim(round(rt/60/60,2)), ",")(0)) & " ч. " & int(Split(round(rt/60,2),",")(0))-int(split(trim(round(rt/60/60,2)), ",")(0))*60 & " мин. " & int(split(rt, ",")(0)) - int(split(trim(round(rt/60/60,2)), ",")(0))*60*60 - (int(Split(round(rt/60,2),",")(0))-int(split(trim(round(rt/60/60,2)), ",")(0))*60)*60 & " сек. " & int(split(round(rt+0.01,3),",")(1)) & " мсек."
Log(" " & now & chr(9) & "Конец " & chr(9) & ansv(GoArr(1)) & ", Размер: " & round((objFile.Size/1024)/1024,2) & "Mb, Время: " & rtime)
' Конец запись в лог ------------------------------
end sub
Sub log(sData)
Dim ts, ForAppending
ForAppending = 8
Set ts = fso.OpenTextFile(FileLog, ForAppending, True)
ts.Write sData & chr(13) & chr(10)
LogAll = LogAll + sData & chr(13) & chr(10)
ts.Close
End Sub
function ansv(arg)
dim Sarg
Sarg = arg
Sarg = replace(Sarg, ":", "")
Sarg = replace(Sarg, "\\", "\")
Sarg = replace(Sarg, "$", "")
if left(Sarg,1) = "\" then
Sarg = right(Sarg, len(Sarg)-1)
end if
if right(Sarg,1) = "\" then
Sarg = left(Sarg, len(Sarg)-1)
end if
Dim arr, i
arr = split(Sarg, "\")
Sarg = arr(0)
for i=1 to ubound(arr)
Sarg = arr(i) & "_" & Sarg
next
ansv = Sarg
end function
'=====================================
'примерный вид файла настроек ListBackUp.ini
'=====================================
# список архивируемых папок
# Строка параметров вводится через ОДИН пробел <1><пробел><2><пробел><3><пробел><4>
# <Переодичность><пробел><ЧТО архивировать><пробел><КУДА архивировать><пробел><Тип архиваци{normal|copy|differential|incremental|daily}>
# D1:10:29 - По дням месяца (создавать архив 1,10 и 29 числа каждого месяца)
# D* - Каждый день (создавать архив каждый день)
# N1:3:5 - По дням недели (создавать архив в Вс, Вт и Чт каждую неделю)
# N* - Каждую неделю (создавать архив каждую субботу) или N7
# M1:6 - По месяцам года (создавать архив 1 января и 1 июня)
# M* - Каждый месяц (создавать архив первого числа каждого месяца) или D1
#
# По рабочим дням
N2:3:4:5:6 \\server\market$\ \\server\d$\BackUp\s07\ differential
# каждое воскресенье
N1 \\server\market$\ \\server\d$\BackUp\server\ normal
Оставить запись с благодарностью..
В начало.