Ежедневно прикладное ПО создает в каталогах
\\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.
Заранее благодарю всех, кто поучаствует в теме.
VBS/WSH/JS - [решено] Архивация файлов с последующим удалением
-
megaloman
Re: VBS/WSH/JS - [решено] Архивация файлов с последующим удалением
Если не принципиально, батник или vbs, то вот решение в батнике
Код:
Пути, естественно, пропишите свои.
За удаление файлов отвечает ключ rar -df, он срабатывает при успешном архивировании.
Думаю, на 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 - [решено] Архивация файлов с последующим удалением
megaloman, а как написать скрипт, чтобы бекап был на три дня? При наступлении четвёртого дня, бекап 1 дня перезаписывался, пятого дня - бекап второго перезаписывался и т.д.
-
Romano
Re: VBS/WSH/JS - [решено] Архивация файлов с последующим удалением
Цитата megaloman:
Если не принципиально, батник или vbs, то вот решение в батнике
Спасибо большое за такой вариант тоже, единственное хотелось бы на VBS
, дело в том, что сейчас это уже реализовано в батнике, он занимает 8 строк, но много чего не учитывает и часто почему то не отрабатывает, приходишь утром, а файлы на месте, вручную запускаешь ВАТ...так что предложенный Ваш вариант тоже протестирую...
Ещё раз спасибо, что уделили время.
Если не принципиально, батник или vbs, то вот решение в батнике
VBS/WSH/JS - [решено] Архивация файлов с последующим удалением
Спасибо большое за такой вариант тоже, единственное хотелось бы на VBS
, дело в том, что сейчас это уже реализовано в батнике, он занимает 8 строк, но много чего не учитывает и часто почему то не отрабатывает, приходишь утром, а файлы на месте, вручную запускаешь ВАТ...так что предложенный Ваш вариант тоже протестирую...Ещё раз спасибо, что уделили время.
-
megaloman
Re: VBS/WSH/JS - [решено] Архивация файлов с последующим удалением
sov44,
Цитата:
чтобы бекап был на три дня
- это неопределённая постановка вопроса. Вот Вам идея решения, нечто подобное реализовано у меня.
Делаете 3 директории Dir1 Dir2 Dir3
Ежедневные бэкапы делаем в Dir1
Но перед бэкапом,
если в Dir2 есть бэкап, убиваем бэкап в Dir3, move бэкап из Dir2 в Dir3
move бэкап из Dir1 в Dir2
Делаем бэкап в Dir1
То есть получаем, что в Dir1 самый свежий бэкап, а в Dir3 самый старый.
Romano,Обещанный скрипт VBS
Код:
Но не надо иллюзий: VBS-скрипт не надёжнее батника, а если у Вас батник не отрабатывал, то ищите причину в доступах, в планировщике (если батник вручную отрабатывает наутро)
Цитата:
чтобы бекап был на три дня
- это неопределённая постановка вопроса. Вот Вам идея решения, нечто подобное реализовано у меня.
Делаете 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 - [решено] Архивация файлов с последующим удалением
Цитата megaloman:
Romano,Обещанный скрипт VBS
Прям не знаю как благодарить!
Спасибо! Быстро и главное работает.
Опробовал батник пока, вроде работает). Он лучше, чем имеющийся у меня. У меня такие бэкапы делаются по нескольким папкам, поэтому попробую на одних папках Ваш батник, на других скрипт VBS.
Когда сейчас резервирование не проходит, в планировщике код завершения стоит 0х1, а что именно произошло не ясно, ведь иногда там бывает и 0х0, когда все успешно архивируется.
Romano,Обещанный скрипт VBS
VBS/WSH/JS - [решено] Архивация файлов с последующим удалением
Прям не знаю как благодарить!
Спасибо! Быстро и главное работает.Опробовал батник пока, вроде работает). Он лучше, чем имеющийся у меня. У меня такие бэкапы делаются по нескольким папкам, поэтому попробую на одних папках Ваш батник, на других скрипт VBS.
Когда сейчас резервирование не проходит, в планировщике код завершения стоит 0х1, а что именно произошло не ясно, ведь иногда там бывает и 0х0, когда все успешно архивируется.