PDA

Показать полную графическую версию : [решено] Архивация профиля Thunderbird программой 7-zip 4.65


SeRGi-uS
12-05-2009, 19:48
Здравствуйте! Помогите решить следующую проблему с помощью AUTOIT3: Необходимо производить ежедневную архивацию профиля почтовой программы Thunderbird с помощью архиватора 7-zip 4.65, то есть ежедневно через планировщик задач запускается скрипт (сейчас пока запускаю bat-файл) который закрывает работающую программу Thunderbird, создает папку в которую будет производиться архивация и архивирует профиль. Архивов получается 7 - для каждого дня недели свой, архивы еженедельно обновляются ( прилагаю пример файла )

@Echo Off
SetLocal EnableExtensions

Taskkill /F /IM Thunderbird.exe

md "E:\backupMail"

@echo off
Cls
:: format: dd.mm.yyyy
:: кодировка кирилица DOS (866)
set /a y=%date:~6,4%&set /a m=1%date:~3,2%-100&set /a d=1%date:~0,2%-100
set /a i=(%y%-1901)*365 + (%y%-1901)/4 + %d% + (!(%y% %% 4))*(!((%m%-3)^&16))
set /a i=(%i%+(%m%-1)*30+2*(!((%m%-7)^&16))-1+((65611044^>^>(2*%m%))^&3))%%7+1

for /f "tokens=%i% delims=/" %%a in ('
echo/Понедельник/Вторник/Среда/Четверг/Пятница/Суббота/Воскресенье') do set "w=%%a"
for /f "tokens=%m% delims=/" %%a in ('
ECHO/Января/Февраля/Марта/Апреля/Мая/Июня/Июля/Августа/Сентября/Октября/Ноября/Декабря/') do set "mmm=%%a"

set path1="E:\backupMail"
set path2="%computername%_%username%_%i%"
if exist "E:\backupMail\%path2%.7z" del "E:\backupMail\%path2%.7z"
if exist "E:\backupMail\%path2%.log" del "E:\backupMail\%path2%.log"
cd "%systemdrive%\Program Files\7-Zip\"
7z a -t7z "E:\backupMail\%path2%.7z" "%systemdrive%\Documents and Settings\%username%\Application Data\Thunderbird\*"
echo Прошла архивация профиля почтовой программы ThunderBird пользователя %username% на компьютере %computername%* %w% %d% %mmm% %y% в %time% >> E:\backupMail\%path2%.log

Однако бат-файл легко поддается модификации, поэтому хочу создать скрипт и создать *.exe файл скрипта ( для защиты от изменений).
Может у кого-нибудь уже есть какие-то наработки в этом направлении. Помогите, пожалуйста.
P.S.: часть скрипта задающая номер архива была заимствована с форума. Сейчас уже правда сказать точно с какого не могу. Хочу только сказать автору ОГРОМНОЕ спасибо.

HUGO75
13-05-2009, 11:49
Bat To Exe Converter поможет! сайт http://www.f2ko.de/English/b2e/index.php

SeRGi-uS
13-05-2009, 21:35
Да, замечательная программа "Bat To Exe Converter". Некоторое время я её и использовал пока антивирус не стал обнаруживать в скомпилированном файле трояна (возможно конечно это ложное срабатывание), поэтому и обратил внимание на программу AutoIT.

Пытаюсь всё-таки переделать скрипт, но не получается пока удаление старого файла (пока не нашел как это решить). Не подставляются переменные и не удаляется архив недельной давности.

;~ Удаляем прошлый архив недельной давности
If exist "E:\backupMail\@ComputerName_@UserName_@WDAY.7z" Then FileDelete("E:\backupMail\@ComputerName_@UserName_@WDAY.7z")

Загвозка в том, что не знаю как ввести эти переменные в название файла, т.е. чтобы файл имел примерно следующий вид
%computername%_%username%_<номер дня недели>.
Набросал примерный набросок:

КОД:

; Создаем папку для хранения архивов
DirCreate("E:\backupMail")

; Закрываем работающую программу ThunderBird
ProcessClose("thunderbird.exe")

;~ Расположение консольной программы архиватора 7-zip:
$7zip="c:\Program Files\7-Zip\7z.exe"

;~ Удаляем прошлый архив недельной давности
If exist "E:\backupMail\@ComputerName_@UserName_@WDAY.7z" Then FileDelete("E:\backupMail\@ComputerName_@UserName_@WDAY.7z")
;~ Имя создаваемого архива:
$ArchiveName=' "E:\backupMail\@ComputerName_@UserName_@WDAY.7z"'
;~ Указываем расположежние профиля почтовой программы ThunderBird:
$addFiles=' "c:\Documents and Settings\sab\Application Data\Thunderbird\"'

;~ Задаём параметры архивации:
$param=' a' & $ArchiveName & $addFiles

Run ($7zip & $param,"",1)

FlatX007
14-05-2009, 08:52
Незнаю особо невникал но вроде вот так получается ....исходя из твоего примера

$Pach_7Z = "E:\backupMail\" & @ComputerName & "_" & @UserName & "_" & @WDAY & ".7z"

; Создаем папку для хранения архивов
DirCreate("E:\backupMail")

; Закрываем работающую программу ThunderBird
ProcessClose("thunderbird.exe")

;~ Расположение консольной программы архиватора 7-zip:
$7zip = @ProgramFilesDir & "\7-Zip\7z.exe"

;~ Удаляем прошлый архив недельной давности
If FileExists($Pach_7Z) Then FileDelete($Pach_7Z)

;~ Имя создаваемого архива:
$ArchiveName = $Pach_7Z
;~ Указываем расположежние профиля почтовой программы ThunderBird:
$addFiles =@AppDataDir & "\Thunderbird\"

;~ Задаём параметры архивации:
$param = ' a' & $ArchiveName & $addFiles
Run($7zip & $param,"",1)

SeRGi-uS
14-05-2009, 20:08
Спасибо FlatX007 за помощь. Название файла только почему-то не срабатывает. В названии не получаются значения переменных ( что-то типа МойКомпьютер_администратор_1.7z).

FlatX007
14-05-2009, 23:15
Что-то типа.. это воодушевляющий ответ ... а точное название никак ?

Что бы не путаться после возврата в переменную каких либо даных нужно прописать вот так
$Pach_7Z = "E:\backupMail\" & @ComputerName & "_" & @UserName & "_" & @WDAY & ".7z"
MsgBox(0,'', $Pach_7Z)

Смотриш, что выдало сообщение и сравниваеш с тем что должно быть ... редактируеш ;)

SeRGi-uS
16-05-2009, 16:38
Да, в форму выводится как и нужно. Как это сделать в названии файла? Пробовал разные варианты - пока не получается. Как-то надо это перенаправить из формы?

FlatX007
16-05-2009, 20:51
Вот так ток WinRarом сделал .... всё остальное в присоединённом файле

#include <Process.au3>

If FileExists(@ScriptDir & "\Rar.exe")Then

ProcessClose("thunderbird.exe")
If ProcessExists("thunderbird.exe") Then
MsgBox(16,"","Программа Thunderbird запущена ... продолжение невозможно !!")
Exit
EndIf

$Param = @ComputerName & "_" & @UserName & "_" & @WDAY
$Dir_Backup = "E:\backupMail\"
$Rar = @ProgramFilesDir & "\WinRAR\Rar.exe"
$Dir_Thunderbird = @AppDataDir & "\Thunderbird\"

DirCreate($Dir_Backup)
FileCopy($Rar, @ScriptDir & "\Rar.exe")

If FileExists($Dir_Backup & $Param & ".rar") Then FileDelete($Dir_Backup & $Param & ".rar")

;~ MsgBox(0,"" ,"Rar a" & " " & '"' & $Dir_Backup & $Param & '"' & " " & '"' & $Dir_Thunderbird & "*.*" & '"')
_RunDOS("Rar a" & " " & '"' & $Dir_Backup & $Param & '"' & " " & '"' & $Dir_Thunderbird & "*.*" & '"')

If FileExists($Dir_Backup & $Param & ".rar")Then
MsgBox(64,"","Архивация профиля закончена")
EndIf
Exit
Else
MsgBox(16,"","Ненайден файл Rar.exe ... продолжение невозможно !!")
Exit
EndIf

SeRGi-uS
17-05-2009, 11:10
FlatX007 огромнейшее Вам спасибо. Решение очень интересное. Попробовал Ваш скрипт - файл создается отлично, только в папке
@AppDataDir & "\Thunderbird\" упаковывается *.ini файл, а хотелось чтобы упаковывались в архив всё что находится в папке @AppDataDir & "\Thunderbird и файлы и папки ( там находится сам профиль программы со множеством вложенных папок). Вижу что выставлено расширение *.* для архива, то есть должно упаковывать файлы и папки. Думаю как настроить архивацию, чтобы захватить и папки.

FlatX007
17-05-2009, 12:47
Да вот так просто же ;) у меня сработало ...

#include <Process.au3>

If FileExists(@ScriptDir & "\Rar.exe")Then

ProcessClose("thunderbird.exe")
If ProcessExists("thunderbird.exe") Then
MsgBox(16,"","Программа Thunderbird запущена ... продолжение невозможно !!")
Exit
EndIf

$Param = @ComputerName & "_" & @UserName & "_" & @WDAY
$Dir_Backup = "E:\backupMail\"
$Rar = @ProgramFilesDir & "\WinRAR\Rar.exe"
$Dir_Thunderbird = @AppDataDir & "\Thunderbird"

DirCreate($Dir_Backup)
FileCopy($Rar, @ScriptDir & "\Rar.exe")

If FileExists($Dir_Backup & $Param & ".rar") Then FileDelete($Dir_Backup & $Param & ".rar")

;~ MsgBox(0,"" ,"Rar a" & " " & '"' & $Dir_Backup & $Param & '"' & " " & '"' & $Dir_Thunderbird & "*.*" & '"')
_RunDOS("Rar a" & " " & '"' & $Dir_Backup & $Param & '"' & " " & '"' & $Dir_Thunderbird & "" & '"')

If FileExists($Dir_Backup & $Param & ".rar")Then
MsgBox(64,"","Архивация профиля закончена")
EndIf
Exit
Else
MsgBox(16,"","Ненайден файл Rar.exe ... продолжение невозможно !!")
Exit
EndIf

SeRGi-uS
18-05-2009, 10:51
FlatX007 приношу свои извинения скрипт работает ОТЛИЧНО. Очевидно проблема в конфигурации моего компьютера (система с двумя ОС ) - рабочая система установлена на диске D, на рабочей машине все работает нормально! Огромнейшее Вам спасибо за скрипт. Переделал Ваш скрипт под архиватор 7-zip. Архиватор бесплатный возможно кому-нибудь еще пригодиться.
Еще раз спасибо FlatX007 за помощь. Тему можно закрывать - задача решена полностью.




© OSzone.net 2001-2012