VBS/WSH/JS - [решено] Архивация файлов с последующим удалением

Ответить
Аватара пользователя
Romano

VBS/WSH/JS - [решено] Архивация файлов с последующим удалением

Сообщение Romano »

Ежедневно прикладное ПО создает в каталогах



\\servername1\FileRes1\Dir1\IN

\\servername1\FileRes1\Dir1\OUT



папки и пишет файлы в них, имена папок формируются по следующему принципу Mxx_Dxx, где М-месяц, D-день. Т.е.набор папок в Dir1\IN(OUT) выглядит так:



февраль

-------

M02_D01

M02_D02

.......

M02_D28



март

----

M03_D01

M03_D02

.......

M03_D31



Необходимо с использованием VBS скрипта, прописанного в планировщике Windows, архивировать RAR'ом созданные за день файлы в папках IN(OUT) на другой сервер по пути



\\servername2\FileRes2\BackupDir1\Год\AchFileNameDDMMYY.RAR, где МM-месяц, DD-день, YY-год т.е. из папок IN(OUT) сливать в один архив, но пути внутри архива сохранять (при распаковке развернется архив в исходные каталоги в том виде в котором они писались отдельно в IN и OUT).



Должна быть проверка, что архивирование прошло успешно (может сеть пропадала, свет выключили и т.д.), затем файлы можно удалить.



Например, наступило 20.03.2011, появятся две директории, начнут в течении дня писаться файлы

\\servername1\FileRes1\Dir1\IN\M03_D20\*.*

\\servername1\FileRes1\Dir1\OUT\M03_D20\*.*

прошел день, ночью запустился планировщик, файлы запаковались в архив

\\servername2\FileRes2\BackupDir1\Год\AchFileName200311.RAR



наступит 21.03.2011, начнут в течении дня писаться файлы

\\servername1\FileRes1\Dir1\IN\M03_D21\*.*

\\servername1\FileRes1\Dir1\OUT\M03_D21\*.*

пройдет день, ночью запустился планировщик, файлы запаковались в архив

\\servername2\FileRes2\BackupDir1\Год\AchFileName210311.RAR



Скрипт будет запускаться с сервера №3 - servername3.







Заранее благодарю всех, кто поучаствует в теме.
Аватара пользователя
megaloman

Re: VBS/WSH/JS - [решено] Архивация файлов с последующим удалением

Сообщение megaloman »

Если не принципиально, батник или vbs, то вот решение в батнике

Код:

Код: Выделить всё

@Echo Off
Set Rar="C:\Program Files\Winrar\Winrar.exe" a -r -df
rem Пути без кавычек с \ на конце 
rem -----------------------------
Set WhereIn=Q:\Delete\Servername1\FileRes1\Dir1\In\
Set WhereOut=Q:\Delete\Servername1\FileRes1\Dir1\Out\
Set WhereArc=Q:\Delete\Servername2\FileRes2\BackupDir1\
rem Имя сегодняшней директории, её не архивируем Mmm_Ddd
rem Если дата в системе в формате dd.mm.yyyy
rem ----------------------------------------------------
Set ToDay=M%Date:~3,2%_D%Date:~0,2%
FOR /F "usebackq delims=" %%i IN (`Dir %WhereIn% /B /A:D`) DO Call :InRar "%%i" "%WhereIn%%%i"
FOR /F "usebackq delims=" %%i IN (`Dir %WhereOut% /B /A:D`) DO Call :InRar "%%i" "%WhereOut%%%i"
GoTo :Eof
:InRar
If /I %~1==%ToDay% GoTo :Eof
Set Year=%~t2
Set Year=%Year:~6,4%
Md %WhereArc%%Year% >Nul 1>Nul 2>nul
rem Имя файла архива AchFileNameDDMMYY.RAR
rem --------------------------------------
Set AFN=%~1
Set AFN=AchFileName%AFN:~-2%%AFN:~1,2%%Year:~-2%
%RAR% "%WhereArc%%Year%\%AFN%" "%WhereIn%%~1" "%WhereOut%%~1"
GoTo :Eof

Пути, естественно, пропишите свои.

За удаление файлов отвечает ключ rar -df, он срабатывает при успешном архивировании.

Думаю, на vbs это будет несколько длинее. Будет время и если никто не напишет, изваяю.
Аватара пользователя
sov44

Re: VBS/WSH/JS - [решено] Архивация файлов с последующим удалением

Сообщение sov44 »

megaloman, а как написать скрипт, чтобы бекап был на три дня? При наступлении четвёртого дня, бекап 1 дня перезаписывался, пятого дня - бекап второго перезаписывался и т.д.
Аватара пользователя
Romano

Re: VBS/WSH/JS - [решено] Архивация файлов с последующим удалением

Сообщение Romano »

Цитата megaloman:



Если не принципиально, батник или vbs, то вот решение в батнике
VBS/WSH/JS - [решено] Архивация файлов с последующим удалением




Спасибо большое за такой вариант тоже, единственное хотелось бы на VBS Изображение, дело в том, что сейчас это уже реализовано в батнике, он занимает 8 строк, но много чего не учитывает и часто почему то не отрабатывает, приходишь утром, а файлы на месте, вручную запускаешь ВАТ...так что предложенный Ваш вариант тоже протестирую...



Ещё раз спасибо, что уделили время.
Аватара пользователя
megaloman

Re: VBS/WSH/JS - [решено] Архивация файлов с последующим удалением

Сообщение megaloman »

sov44,
Цитата:



чтобы бекап был на три дня



- это неопределённая постановка вопроса. Вот Вам идея решения, нечто подобное реализовано у меня.

Делаете 3 директории Dir1 Dir2 Dir3

Ежедневные бэкапы делаем в Dir1

Но перед бэкапом,

если в Dir2 есть бэкап, убиваем бэкап в Dir3, move бэкап из Dir2 в Dir3

move бэкап из Dir1 в Dir2

Делаем бэкап в Dir1



То есть получаем, что в Dir1 самый свежий бэкап, а в Dir3 самый старый.



Romano,Обещанный скрипт VBS

Код:

Код: Выделить всё

Rar = """C:\Program Files\Winrar\Winrar.exe"" a -r -df "
WhereIn = "Q:\Delete\Servername1\FileRes1\Dir1\In\"     ' Пути без кавычек с \ на конце
WhereOut = "Q:\Delete\Servername1\FileRes1\Dir1\Out\"
WhereArc = "Q:\Delete\Servername2\FileRes2\BackupDir1\"
D = Day(Date)
If D < 10 Then DD = "0" + CStr(D) Else DD = CStr(D)
M = Month(Date)
If M < 10 Then MM = "0" + CStr(M) Else MM = CStr(M)
ToDay = "M" + MM + "_D" + DD        ' Имя сегодняшней директории, её не архивируем Mdd_Ddd
Set WS = CreateObject("WScript.Shell")
Set FSO = CreateObject("Scripting.FileSystemObject")
For i = 1 To 2
    If i = 1 Then Set F = FSO.GetFolder(WhereIn) Else Set F = FSO.GetFolder(WhereOut)
    Set SubF = F.SubFolders
    For Each Folder In SubF
        FN = UCase(Folder.Name)
        If ToDay  FN Then
            YYYY = CStr(Year(Folder.DateCreated))
            On Error Resume Next
            If Not FSO.FolderExists(WhereArc + YYYY) Then Call FSO.CreateFolder(WhereArc + YYYY)
            If Err.Number  0 Then MsgBox "Не удалось создать папку для архивов"
            On Error GoTo 0
            If FSO.FolderExists(WhereArc + YYYY) Then
                YY = Mid(YYYY, 3, 2)
                SRar = Rar + """" + WhereArc + YYYY + "\ArcFileName" + Mid(FN, 6, 2) + Mid(FN, 2, 2) + YY + """"
                SRar = SRar + " """ + WhereIn + FN + """" + " """ + WhereOut + FN + """"
                Rez = WS.Run(SRar, 1, True)
            End If
        End If
    Next
Next

Но не надо иллюзий: VBS-скрипт не надёжнее батника, а если у Вас батник не отрабатывал, то ищите причину в доступах, в планировщике (если батник вручную отрабатывает наутро)
Аватара пользователя
Romano

Re: VBS/WSH/JS - [решено] Архивация файлов с последующим удалением

Сообщение Romano »

Цитата megaloman:



Romano,Обещанный скрипт VBS
VBS/WSH/JS - [решено] Архивация файлов с последующим удалением




Прям не знаю как благодарить! Изображение Спасибо! Быстро и главное работает.



Опробовал батник пока, вроде работает). Он лучше, чем имеющийся у меня. У меня такие бэкапы делаются по нескольким папкам, поэтому попробую на одних папках Ваш батник, на других скрипт VBS.



Когда сейчас резервирование не проходит, в планировщике код завершения стоит 0х1, а что именно произошло не ясно, ведь иногда там бывает и 0х0, когда все успешно архивируется.
Ответить

Вернуться в «Скриптовые языки администрирования Windows»