'=====================================
 'А такой вариант. Если кому будет интересно.
 '=====================================

 ' Дата последнего изменения: 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
Оставить запись с благодарностью..
В начало.
Hosted by uCoz