Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Архивация профиля Thunderbird программой 7-zip 4.65 (http://forum.oszone.net/showthread.php?t=139946)

SeRGi-uS 12-05-2009 19:48 1116675

Архивация профиля Thunderbird программой 7-zip 4.65
 
Здравствуйте! Помогите решить следующую проблему с помощью 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 1117208

Bat To Exe Converter поможет! сайт http://www.f2ko.de/English/b2e/index.php

SeRGi-uS 13-05-2009 21:35 1117700

Да, замечательная программа "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 1117949

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

Код:

$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 1118594

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

FlatX007 14-05-2009 23:15 1118761

Что-то типа.. это воодушевляющий ответ ... а точное название никак ?

Что бы не путаться после возврата в переменную каких либо даных нужно прописать вот так
Код:

$Pach_7Z = "E:\backupMail\" & @ComputerName & "_" & @UserName & "_" & @WDAY & ".7z"
MsgBox(0,'', $Pach_7Z)

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

SeRGi-uS 16-05-2009 16:38 1120122

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

FlatX007 16-05-2009 20:51 1120293

Вот так ток 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 1120550

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

FlatX007 17-05-2009 12:47 1120617

Да вот так просто же ;) у меня сработало ...

Код:

#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 1121259

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


Время: 12:27.

Время: 12:27.
© OSzone.net 2001-