Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Архивация файлов с последующим удалением

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

Новый участник


Сообщения: 11
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

\\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.



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

Отправлено: 16:45, 20-03-2011

 

Ветеран


Contributor


Сообщения: 2709
Благодарности: 1685

Профиль | Отправить PM | Цитировать


Если не принципиально, батник или 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 это будет несколько длинее. Будет время и если никто не напишет, изваяю.

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.


Последний раз редактировалось megaloman, 20-03-2011 в 23:06.

Это сообщение посчитали полезным следующие участники:

Отправлено: 22:57, 20-03-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ветеран


Сообщения: 2183
Благодарности: 721

Профиль | Отправить PM | Цитировать


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

Отправлено: 13:56, 21-03-2011 | #3


Новый участник


Сообщения: 11
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

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

Отправлено: 17:23, 21-03-2011 | #4


Ветеран


Contributor


Сообщения: 2709
Благодарности: 1685

Профиль | Отправить PM | Цитировать


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-скрипт не надёжнее батника, а если у Вас батник не отрабатывал, то ищите причину в доступах, в планировщике (если батник вручную отрабатывает наутро)

-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.

Это сообщение посчитали полезным следующие участники:

Отправлено: 23:15, 22-03-2011 | #5


Новый участник


Сообщения: 11
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата megaloman:
Romano,Обещанный скрипт VBS »
Прям не знаю как благодарить! Спасибо! Быстро и главное работает.

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

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

Отправлено: 18:03, 23-03-2011 | #6



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Архивация файлов с последующим удалением

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - [Проблема] Архивация файлов Brb Microsoft Windows 7 4 19-08-2011 10:14
Искажение с последующим зависанием sylar3000 Непонятные проблемы с Железом 3 12-04-2010 14:01
Доступ - [решено] Архивация пользовательских файлов отключена системным администратором AlexxVP Microsoft Windows 7 2 03-03-2010 18:25
C/C++ - Си и функция рандома с последующим выводом. ElHalcone Программирование и базы данных 2 12-12-2008 21:13
захват DV с последующим сжатием... el dorado Видео и аудио: обработка и кодирование 3 23-08-2005 14:17




 
Переход