AutoIt: 3.3.8.1
Версия: 1.0.0.4
Категория: Автоматизация, Вспомогательные функции, Строки, Реестр, Окна и диалоги, Файловая система, Элементы GUI, Разное
Описание:
Код/Пример:
Файлы: https://www.dropbox.com/sh/hq89hqpb0l09ywh/oY-yPvZFVI
Снимок:
История версий:
Источник: autoit-script.ru
Автор(ы): ivsatel
Версия: 1.0.0.4
Категория: Автоматизация, Вспомогательные функции, Строки, Реестр, Окна и диалоги, Файловая система, Элементы GUI, Разное
Описание:
Программа для резервного копирования профиля uTorrent. Поддержка до 5-ти профилей. Возможность задать степень компрессии, и исходный формат архива. Так же возможен "откат" профиля.
Для сжатия используется архиватор 7zip. Возможные форматы полученных архивов 7z и zip.
Программе потребуется первый запуск для задания настроек. После чего будет создан BTF.ini, файл в котором сохранятся все ваши настройки. В дальнейшем при запуске программы не будет отображаться графический интерфейс при наличии BTF.ini. New Добавил функцию очистки профиля от мертвых файлов. Добавил функцию удаления пустых папок из папок загрузки. Добавил функцию удаления "лишних" торрент файлов из папок загрузки. Теперь при запуске программы не будет отображаться графический интерфейс при наличии в BTF.ini записей о пути к профилю и пути для сохранения резервной копии. Порядок работы с программой
Выбрать количество профилей
Выбрать (если есть расхождения) путь к профилю(ям)
Выбрать путь для резервных копий
Выбрать степень сжатия
Выбрать формат исходного архива(ов)
Добавить программу в автозагрузку (по желанию)
Нажать кнопку "Сохранить и закрыть"
Доп. информация: Архивацию можно использовать не только для профиля uTorrent)
Для сжатия используется архиватор 7zip. Возможные форматы полученных архивов 7z и zip.
Программе потребуется первый запуск для задания настроек. После чего будет создан BTF.ini, файл в котором сохранятся все ваши настройки. В дальнейшем при запуске программы не будет отображаться графический интерфейс при наличии BTF.ini. New Добавил функцию очистки профиля от мертвых файлов. Добавил функцию удаления пустых папок из папок загрузки. Добавил функцию удаления "лишних" торрент файлов из папок загрузки. Теперь при запуске программы не будет отображаться графический интерфейс при наличии в BTF.ini записей о пути к профилю и пути для сохранения резервной копии. Порядок работы с программой
Выбрать количество профилей
Выбрать (если есть расхождения) путь к профилю(ям)
Выбрать путь для резервных копий
Выбрать степень сжатия
Выбрать формат исходного архива(ов)
Добавить программу в автозагрузку (по желанию)
Нажать кнопку "Сохранить и закрыть"
Доп. информация: Архивацию можно использовать не только для профиля uTorrent)
Код/Пример:
Код:
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <StaticConstants.au3>
#include <EditConstants.au3>
#include <ButtonConstants.au3>
#include <ComboConstants.au3>
#include <FileOperations.au3>
#include <Array.au3>
#include <ListBoxConstants.au3>
#include <WinAPI.au3>
#include <Misc.au3>
Opt("GUIResizeMode", 2 + 32 + 256 + 512)
Opt("MustDeclareVars", 1)
Opt("TrayMenuMode", 1 + 2) ; Не отображать в трее пункты меню по умолчанию (Script Paused/Exit) и не отмечать галочками при выборе
Opt('WinTitleMatchMode', 2) ;Включить поиск по части заголовка
FileInstall("7z.exe", @TempDir & '\7z.exe')
FileInstall("7z.dll", @TempDir & '\7z.dll')
Global $hGui, $Combo, $Combo_2, $iEdit1, $iEdit2, $Button_1, $Button_2, $Button_3, $sPath1, $sPath2, $sPath_ini = @ScriptDir & "\BTF.ini", $ProfCol, $presbatton1, _
$presbatton2, $ColProfEnd, $StArh, $7z = @TempDir & '\7z.exe', $sReadPath, $sReadProfPath, $File, $Combo_3, $FormatArh, $SerchDir, $Button_4, $TestLive = '0', _
$radio1, $radio2, $radio3, $Button_5, $Button_6, $LabelPathProf, $presbatton3, $LabelPathUnPackProf, $e, $iFreeSpace, $Latter, $List, $sResumDATPred, $progress2, _
$i, $dll, $sini, $ed1, $TestRead1, $TestRead2, $DelEmptyFile, $DelEmptyFolders, $Cleardeathfiles, $Combo_4, $Combo_5, $Combo_6, $FolderSize, $iSizeDir, $min, $df, _
$ColFiles, $ColDay, $iDateCalc, $aMax1God, $aMax1Time, $aMaxGod, $aMaxTime, $aMin1God, $aMin1Time, $aMinGod, $aMinTime, $aMax, $tMax, $aMin, $tMin, $SumProf, _
$check, $Read1, $Read2
Global $checkbox[5], $DirFind, $aArrayDrive, $DeathFile[1], $LiveFile[1], $aFileProfDirList, $ArrayFolders, $aArrayfinddryve[1], $FolderList, $aNewArrayFolders, _
$ArrayFoldersF, $EmptyFileList, $aNewArrayFoldersF, $DeathFilePred[1], $LiveFilePred[1], $aFileProfDirListPred[1], $sArrayini1, $sArrayini2, $sArrayini3, _
$sArrayini4, $sArrayini5, $sArrayini6, $sArrayini7, $sArrayini8, $sArrayini9, $sArrayini10, $sArrayini11, $aFileColList, $FileList, $FileListFD, $FileListFS, _
$FolderListL, $sArrayini12, $sArrayRead1, $sArrayRead2, $aFileColList_2D, $sStandartProfPath = @AppDataDir & '\uTorrent', $aAltFileProfDirListPred
;################################################################################################################################################
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Чтение ini файла
$sini = FileRead(@ScriptDir & '\BTF.ini')
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Поиск пути к профилю
$SerchDir = _FO_FileSearch($sStandartProfPath, 'resume.dat', True, 125, 1, 0, 0)
If $SerchDir = '' Then
$sStandartProfPath = _FO_FileSearch(StringRegExp($sini, 'ProfPath1[\=](.*?)', 3), 'resume.dat', True, 125, 1, 2, 0)
If Not IsArray($sStandartProfPath) Then
If MsgBox(1 + 48, 'Ошибка', 'Файл настроек не найден!' & @LF & 'Продолжить работу программы?') = 2 Then Exit
EndIf
EndIf
$DirFind = StringRegExp($SerchDir, '(.*?)[\\]resume.dat\z', 3)
If IsArray($DirFind) Then
$FileList = $DirFind[0]
Else
$FileList = ''
EndIf
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Создание списка торрент файлов для сравнения с содержимым resume.dat
$aAltFileProfDirListPred = StringRegExp(FileRead($sStandartProfPath & '\settings.dat'), 'dir[\_]completed[\_]torrents\d[\:](.*?)\d\d:', 1)
If Not IsArray($aAltFileProfDirListPred) Then
$aFileProfDirListPred = _FO_FileSearch($sStandartProfPath, "*.torrent", True, 125, 2) ; имя с расширением
If Not IsArray($aFileProfDirListPred) Then
If MsgBox(1 + 48, 'Ошибка', 'Создание списка торрент файлов не возможно!' & @LF & 'Продолжить работу программы?') = 2 Then Exit
EndIf
Else
$aFileProfDirListPred = _FO_FileSearch($aAltFileProfDirListPred[0], "*.torrent", True, 125, 2, 1) ; имя с расширением
If Not IsArray($aFileProfDirListPred) Then
If MsgBox(1 + 48, 'Ошибка', 'Создание списка торрент файлов не возможно!' & @LF & 'Продолжить работу программы?') = 2 Then Exit
EndIf
EndIf
$sResumDATPred = FileRead(_FO_FileSearch($sStandartProfPath, "resume.dat", True, 125, 1, 0))
If $sResumDATPred = 1 Then
If MsgBox(1 + 48, 'Ошибка', 'Чтение файла настроек не возможно!' & @LF & 'Продолжить работу программы?') = 2 Then Exit
EndIf
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Сравнения с содержимым resume.dat и создание массива мертвых и живых
If IsArray($aFileProfDirListPred) Then
For $i = 1 To $aFileProfDirListPred[0]
If StringInStr($sResumDATPred, _WinAPI_WideCharToMultiByte($aFileProfDirListPred[$i], 65001)) Then ; Если путь содержится в resume.dat, то
_ArrayAdd($LiveFilePred, $aFileProfDirListPred[$i])
Else
_ArrayAdd($DeathFilePred, $aFileProfDirListPred[$i])
EndIf
Next
EndIf
;################################################################################################################################################
$sArrayini1 = StringRegExp($sini, '(?i)ProfArhPath\d+\=([^\n\r]+)', 3) ; Получение значения Путь к архивному профилю
If IsArray($sArrayini1) Then
$TestRead1 = $sArrayini1[0]
Else
$TestRead1 = 'error'
EndIf
$sArrayini2 = StringRegExp($sini, '(?i)ProfPath\d+\=([^\n\r]+)', 3) ; Получение значения Путь к профилю
If IsArray($sArrayini2) Then
$TestRead2 = $sArrayini2[0]
Else
$TestRead2 = 'error'
EndIf
$ArrayFolders = StringRegExp($sResumDATPred, '(?i)path\d+[\:]([A-Z][\:][\\].*?)[\\]', 3) ; Обработка resume.dat на предмет путей к папкам загрузки
If IsArray($ArrayFolders) Then
$aNewArrayFolders = _ArrayUnique($ArrayFolders)
_ArraySort($aNewArrayFolders)
EndIf
$sArrayini12 = StringRegExp($sini, '(?i)ColProf\=(\d+)', 3) ; Чтение ini на предмет количества профилей
If IsArray($sArrayini12) Then
$SumProf = $sArrayini12[0]
Else
$SumProf = 'error'
EndIf
$sArrayini5 = StringRegExp($sini, '(?i)ColProf\=(\d+)', 3) ; Чтение ini на предмет количества профилей
If IsArray($sArrayini5) Then
$ColProfEnd = $sArrayini5[0]
Else
$ColProfEnd = '1'
EndIf
$sArrayini7 = StringRegExp($sini, 'Del Empty Folders[\=](\d+)', 3) ; Чтение ini на предмет удаления пустых папок в папках раздач
If IsArray($sArrayini7) Then
$DelEmptyFolders = $sArrayini7[0]
Else
$DelEmptyFolders = 'error'
EndIf
;################################################################################################################################################
$dll = DllOpen("user32.dll")
For $i = 1 To 1
If _IsPressed("11", $dll) Or $TestRead1 = 'error' Or $TestRead2 = 'error' Then
_GUICRT()
Else
If $TestRead1 <> 'error' And $TestRead2 <> 'error' Then
_ArhBuck()
_ColFilesDir()
_ClearFolderSize()
_ColFileDay()
_DelEmptyFiles()
_DelEmptyFolders()
_ClearDF()
EndIf
EndIf
Next
DllClose($dll)
Func _ArhBuck()
$sArrayini4 = StringRegExp($sini, 'Format[\=](.*?)\r', 3)
If $sArrayini4[0] = '.7z' Or $sArrayini4[0] = '.zip' Then
$FormatArh = $sArrayini4[0]
Else
$FormatArh = '.7z'
EndIf
For $i = 1 To $SumProf
$sArrayRead1 = StringRegExp($sini, '(?i)ProfArhPath' & $i & '[\=]([^\n\r]+)', 3)
If IsArray($sArrayRead1) Then
$Read1 = $sArrayRead1[0]
Else
$Read1 = 'error'
EndIf
$sArrayRead2 = StringRegExp($sini, '(?i)ProfPath' & $i & '[\=]([^\n\r]+)', 3)
If IsArray($sArrayRead2) Then
$Read2 = $sArrayRead2[0]
Else
$Read2 = 'error'
EndIf
$File = $Read1 & '\Prof' & '-' & $i & ' ' & @MDAY & '.' & @MON & '.' & @YEAR & ' ' & @HOUR & '-' & @MIN & $FormatArh
If $Read2 <> 'error' Or $Read1 <> 'error' Then
RunWait('"' & $7z & '" a "' & $File & '" "' & $Read2 & '"', '', @SW_HIDE)
If IsArray($aAltFileProfDirListPred) Then
RunWait('"' & $7z & '" a "' & $Read1 & '\TorrentFileProf' & '-' & $i & ' ' & @MDAY & '.' & @MON & '.' & @YEAR & ' ' & @HOUR & '-' & @MIN & $FormatArh & '" "' & $aAltFileProfDirListPred[0] & '"', '', @SW_HIDE)
EndIf
Else
Return
EndIf
Next
EndFunc ;==>_ArhBuck
Func _ClearDF()
If $SumProf <> '1' Then
Return
EndIf
$sArrayini8 = StringRegExp($sini, 'Clear death files[\=](\d+)', 3)
If IsArray($sArrayini8) Then
$Cleardeathfiles = $sArrayini8[0]
Else
$Cleardeathfiles = 'error'
EndIf
If $Cleardeathfiles = '1' Then
$aFileProfDirList = _FO_FileSearch($sStandartProfPath, "*.torrent", True, 125, 2) ; имя с расширением
If Not IsArray($aFileProfDirList) Then
;MsgBox(1+48,'1', 'Не удалось получить имена торрент файлов'&@LF&'$aFileProfDirList = 0')
Return
Else
For $i = 1 To UBound($aFileProfDirList) - 1
If StringInStr($sResumDATPred, _WinAPI_WideCharToMultiByte($aFileProfDirList[$i], 65001)) Then ; Если путь содержится в settings.dat, то
_ArrayAdd($LiveFile, $aFileProfDirList[$i]) ; добавить в массив живых
Else
_ArrayAdd($DeathFile, $aFileProfDirList[$i]) ; иначе в массив мертвых
EndIf
Next
For $i = 1 To UBound($DeathFile) - 1
FileDelete($sStandartProfPath & $DeathFile[$i])
Next
EndIf
EndIf
EndFunc ;==>_ClearDF
Func _DelEmptyFolders()
If $SumProf <> '1' Then
Return
EndIf
If $DelEmptyFolders = '1' And $TestRead2 <> 'error' Then
If IsArray($aNewArrayFolders) Then
For $i = 1 To UBound($aNewArrayFolders) - 1
$FolderList = _FO_SearchEmptyFolders($aNewArrayFolders[$i], 1, 1)
For $e = 1 To UBound($FolderList) - 1
DirRemove(_ArrayToString($FolderList, '', $e, $e), 1)
Next
Next
Else
Return
EndIf
EndIf
EndFunc ;==>_DelEmptyFolders
Func _DelEmptyFiles()
If $SumProf <> '1' Then
Return
EndIf
$sArrayini6 = StringRegExp($sini, 'Del Empty File[\=](\d+)', 3)
If IsArray($sArrayini6) Then
$DelEmptyFile = $sArrayini6[0]
Else
$DelEmptyFile = 'error'
EndIf
If $DelEmptyFile = '1' And $SumProf = '1' Then
$ArrayFoldersF = StringRegExp($sResumDATPred, '(?i)path\d+?[\:]([A-Z][\:][\\].*?)[\\]', 3) ; получаем массив совпадений
If IsArray($ArrayFoldersF) Then
$aNewArrayFoldersF = _ArrayUnique($ArrayFoldersF)
_ArraySort($aNewArrayFoldersF)
EndIf
If IsArray($aNewArrayFoldersF) Then
For $i = 1 To UBound($aNewArrayFoldersF) - 1
$EmptyFileList = _FO_FileSearch($aNewArrayFoldersF[$i], '*.torrent', True, 125)
For $e = 1 To UBound($EmptyFileList) - 1
FileDelete(_ArrayToString($EmptyFileList, '', $e, $e))
Next
Next
Else
Return
EndIf
EndIf
EndFunc ;==>_DelEmptyFiles
Func _ArhBuckLive()
If GUICtrlRead($iEdit1) = '' Then
MsgBox('', '', 'Укажите путь к профилю')
Return
Else
$sReadProfPath = GUICtrlRead($iEdit1)
EndIf
If GUICtrlRead($iEdit2) = '' Then
MsgBox('', '', 'Укажите путь куда копировать профиль')
Return
Else
$sReadPath = GUICtrlRead($iEdit2) & '\Test ' & @MDAY & '.' & @MON & '.' & @YEAR & ' ' & @HOUR & '-' & @MIN & '.zip'
EndIf
RunWait('"' & $7z & '" a "' & $sReadPath & '" "' & $sReadProfPath & '"', '', @SW_HIDE)
Exit
EndFunc ;==>_ArhBuckLive
Func _ExtrArhLive()
If GUICtrlRead($iEdit1) = '' Then
MsgBox('', '', 'Укажите путь к архивному профилю')
Return
Else
$sReadPath = GUICtrlRead($iEdit1)
EndIf
If GUICtrlRead($iEdit2) = '' Then
MsgBox('', '', 'Укажите путь куда распаковать профиль')
Return
Else
$sReadProfPath = GUICtrlRead($iEdit2)
EndIf
RunWait($7z & ' x "' & $sReadPath & '" -o"' & $sReadProfPath & '" "-aoa"', @ScriptDir, @SW_HIDE)
Exit
EndFunc ;==>_ExtrArhLive
Func _GUICRT()
Local $msg
$hGui = GUICreate("Резервное копирование профиля µTorrent", 630, 360, -1, -1, $WS_OVERLAPPEDWINDOW) ; Создаёт окно в центре экрана
GUICtrlCreateGroup("Режим использования", 190, 4, 205, 78) ; элемент Group группирует радиокнопки
$radio1 = GUICtrlCreateRadio("Полный функционал", 200, 20, -1, 20)
$radio2 = GUICtrlCreateRadio("Тестовое копирование", 200, 40, -1, 20)
$radio3 = GUICtrlCreateRadio("Восстановление резервной копии", 200, 60, -1, 20)
GUICtrlSetState($radio1, $GUI_CHECKED)
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUICtrlCreateLabel('Выберите колличество профилей', 1, 15, -1, -1, $SS_LEFT)
$Combo = GUICtrlCreateCombo("", 1, 30, 165, 25)
GUICtrlSetData(-1, '1|2|3|4|5')
$LabelPathProf = GUICtrlCreateLabel('Выберите путь к профилю', 1, 70, 150, -1, $SS_LEFT)
If $FileList = '' Then
$iEdit1 = GUICtrlCreateEdit('', 1, 85, 350, -1, $ES_NOHIDESEL + $ES_WANTRETURN)
Else
$iEdit1 = GUICtrlCreateEdit($FileList, 1, 85, 350, -1, $ES_NOHIDESEL + $ES_WANTRETURN)
EndIf
$Button_1 = GUICtrlCreateButton("...", 360, 83, 30)
$LabelPathUnPackProf = GUICtrlCreateLabel('Выберите путь для сохранения резервной копии', 1, 115, 300, -1, $SS_LEFT)
$sArrayini3 = StringRegExp($sini, 'ProfArhPath\d+?[\=](.*?)\r', 3) ; Прочесть значение "Путь к архивному профилю"
If IsArray($sArrayini3) Then
$ed1 = $sArrayini3[0]
Else
$ed1 = ''
EndIf
$iEdit2 = GUICtrlCreateEdit($ed1, 1, 130, 350, -1, $ES_NOHIDESEL + $ES_WANTRETURN)
$Button_2 = GUICtrlCreateButton("...", 360, 128, 30)
$aArrayDrive = DriveGetDrive("FIXED")
If @error Then
; Произошла ошибка при извлечении диска.
MsgBox(4096, "DriveGetDrive", "Произошла ошибка.")
Else
GUICtrlCreateGroup('Информация', 400, 5, 220, 160, $SS_LEFT)
$List = GUICtrlCreateList('', 410, 25, 200, 135, $GUI_SS_DEFAULT_LIST + $LBS_NOINTEGRALHEIGHT)
For $i = 1 To UBound($aArrayDrive) - 1
$iFreeSpace = DriveSpaceFree($aArrayDrive[$i] & "\")
$Latter = $aArrayDrive[$i]
GUICtrlSetData($List, 'Свободно на диске ' & StringUpper($Latter) & ' ' & StringRegExpReplace(Round($iFreeSpace), '(\A\d{1,3}(?=(\d{3})+\z)|\d{3}(?=\d))', '\1 ') & ' GB')
Next
;################## Проверка существования путей к папкам загрузки
If IsArray($aNewArrayFolders) Then
For $i = 1 To UBound($aNewArrayFolders) - 1
$FolderListL = _FO_SearchEmptyFolders($aNewArrayFolders[$i], 1, 1)
For $e = 1 To UBound($FolderListL) - 1
GUICtrlSetData($List, 'Пустая папка ' & _ArrayToString($FolderListL, '', $e, $e))
Next
Next
EndIf
;##################
EndIf
GUICtrlSetData($List, 'Мертвых торрентов ' & UBound($DeathFilePred) - 1)
GUICtrlSetData($List, 'Живых торрентов ' & UBound($LiveFilePred) - 1)
$checkbox[1] = GUICtrlCreateCheckbox("Добавить программу в автозагрузку", 190, 160)
GUICtrlSetState(-1, $GUI_DISABLE)
$checkbox[2] = GUICtrlCreateCheckbox("Удалить мертвые торрент файлы", 190, 180)
GUICtrlSetState(-1, $GUI_DISABLE)
$checkbox[3] = GUICtrlCreateCheckbox("Удалить пустые папки", 190, 200)
GUICtrlSetState(-1, $GUI_DISABLE)
$checkbox[4] = GUICtrlCreateCheckbox("Удалить лишние *.torrent файлы", 190, 220)
GUICtrlSetState(-1, $GUI_DISABLE)
$Button_3 = GUICtrlCreateButton("Сохранить и закрыть", 1, 240)
$Button_4 = GUICtrlCreateButton("Запустить резервное копирование", 1, 270)
$Button_5 = GUICtrlCreateButton("Запустить восстановление из резервной копии", 1, 300)
$Button_6 = GUICtrlCreateButton("Закрыть со сбросом предыдущих настроек программы", 1, 330)
GUICtrlCreateLabel('Выберите степень сжатия', 1, 160, 185, -1, $SS_LEFT)
$Combo_2 = GUICtrlCreateCombo("", 10, 175, 100, 25)
GUICtrlSetData(-1, '0|1|2|3|4|5|6|7|8|9')
GUICtrlCreateLabel('Выберите конечный формат архива', 1, 200, 185, -1, $SS_LEFT)
$Combo_3 = GUICtrlCreateCombo("", 10, 215, 100, 25)
GUICtrlSetData(-1, '.zip|.7z')
GUICtrlCreateGroup('Обслуживание архивов', 400, 170, 220, 160, $SS_LEFT)
GUICtrlCreateLabel('По количеству файлов в папке', 410, 185, -1, -1, $SS_LEFT)
$Combo_4 = GUICtrlCreateCombo("", 410, 205, 150, 25)
GUICtrlSetState($Combo_4, $GUI_DISABLE)
GUICtrlSetData(-1, '0 Файлов|10 Файлов|20 Файлов|30 Файлов|40 Файлов|50 Файлов|60 Файлов|70 Файлов|80 Файлов|90 Файлов|100 Файлов', '0 Файлов')
GUICtrlCreateLabel('По размеру папки в MB', 410, 230, -1, -1, $SS_LEFT)
$Combo_5 = GUICtrlCreateCombo("", 410, 245, 150, 25)
GUICtrlSetState($Combo_5, $GUI_DISABLE)
GUICtrlSetData(-1, '0 MB|10 MB|20 MB|30 MB|40 MB|50 MB|60 MB|70 MB|80 MB|90 MB|100 MB', '0 MB')
GUICtrlCreateLabel('По дате файлов', 410, 270, -1, -1, $SS_LEFT)
$Combo_6 = GUICtrlCreateCombo("", 410, 285, 150, 25)
GUICtrlSetState($Combo_6, $GUI_DISABLE)
GUICtrlSetData(-1, '0 Дней|10 Дней|20 Дней|30 Дней|40 Дней|50 Дней|60 Дней|70 Дней|80 Дней|90 Дней|100 Дней', '0 Дней')
GUICtrlCreateGroup("", -99, -99, 1, 1)
GUISetState(@SW_SHOW)
While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
Case $radio1
GUICtrlSetData($LabelPathProf, 'Выберите путь к профилю')
GUICtrlSetData($LabelPathUnPackProf, 'Выберите путь для сохранения резервной копии')
GUICtrlSetState($Combo, $GUI_ENABLE)
GUICtrlSetState($Combo_2, $GUI_ENABLE)
GUICtrlSetState($Combo_3, $GUI_ENABLE)
If GUICtrlRead($Combo) <> '1' Or GUICtrlRead($Combo) = '' Then
GUICtrlSetState($checkbox[1], $GUI_DISABLE)
GUICtrlSetState($checkbox[2], $GUI_DISABLE)
GUICtrlSetState($checkbox[3], $GUI_DISABLE)
GUICtrlSetState($checkbox[4], $GUI_DISABLE)
Else
GUICtrlSetState($checkbox[1], $GUI_ENABLE)
GUICtrlSetState($checkbox[2], $GUI_ENABLE)
GUICtrlSetState($checkbox[3], $GUI_ENABLE)
GUICtrlSetState($checkbox[4], $GUI_ENABLE)
EndIf
GUICtrlSetState($Button_3, $GUI_ENABLE)
GUICtrlSetState($Button_4, $GUI_ENABLE)
GUICtrlSetState($Button_5, $GUI_ENABLE)
GUICtrlSetState($Button_6, $GUI_ENABLE)
Case $radio2
GUICtrlSetData($LabelPathProf, 'Выберите путь к профилю')
If GUICtrlRead($radio2) = $GUI_CHECKED Then
GUICtrlSetState($Button_4, $GUI_ENABLE)
EndIf
$TestLive += 1
If $TestLive = 1 Then
MsgBox('', '', 'В режиме тестирования или одноразового запуска' & _
@LF & 'доступно копирование только одного профиля' & @LF & 'для копирования нескольких профилей' & _
@LF & 'пройдите процедуру предварительной настройки программы.' & @LF & 'Так-же недоступно задание компрессии и формата архива.')
EndIf
GUICtrlSetState($Combo, $GUI_DISABLE)
GUICtrlSetState($Combo_2, $GUI_DISABLE)
GUICtrlSetState($Combo_3, $GUI_DISABLE)
GUICtrlSetState($checkbox[1], $GUI_DISABLE)
GUICtrlSetState($checkbox[2], $GUI_DISABLE)
GUICtrlSetState($checkbox[3], $GUI_DISABLE)
GUICtrlSetState($checkbox[4], $GUI_DISABLE)
GUICtrlSetState($Button_3, $GUI_DISABLE)
GUICtrlSetState($Button_5, $GUI_DISABLE)
GUICtrlSetState($Button_6, $GUI_DISABLE)
Case $radio3
GUICtrlSetData($LabelPathProf, 'Выберите путь к архиву')
GUICtrlSetData($LabelPathUnPackProf, 'Выберите путь для распаковки архивной копии профиля')
If GUICtrlRead($radio3) = $GUI_CHECKED Then
GUICtrlSetState($Button_5, $GUI_ENABLE)
EndIf
GUICtrlSetState($Combo, $GUI_DISABLE)
GUICtrlSetState($Combo_2, $GUI_DISABLE)
GUICtrlSetState($Combo_3, $GUI_DISABLE)
GUICtrlSetState($Combo_4, $GUI_DISABLE)
GUICtrlSetState($Combo_5, $GUI_DISABLE)
GUICtrlSetState($Combo_6, $GUI_DISABLE)
GUICtrlSetState($checkbox[1], $GUI_DISABLE)
GUICtrlSetState($checkbox[2], $GUI_DISABLE)
GUICtrlSetState($checkbox[3], $GUI_DISABLE)
GUICtrlSetState($checkbox[4], $GUI_DISABLE)
GUICtrlSetState($Button_3, $GUI_DISABLE)
GUICtrlSetState($Button_4, $GUI_DISABLE)
Case $Combo_4
If GUICtrlRead($Combo_4) = '0 Файлов' Then
GUICtrlSetState($Combo_5, $GUI_ENABLE)
GUICtrlSetState($Combo_6, $GUI_ENABLE)
Else
GUICtrlSetState($Combo_5, $GUI_DISABLE)
GUICtrlSetState($Combo_6, $GUI_DISABLE)
EndIf
Case $Combo_5
If GUICtrlRead($Combo_5) = '0 MB' Then
GUICtrlSetState($Combo_4, $GUI_ENABLE)
GUICtrlSetState($Combo_6, $GUI_ENABLE)
Else
GUICtrlSetState($Combo_4, $GUI_DISABLE)
GUICtrlSetState($Combo_6, $GUI_DISABLE)
EndIf
Case $Combo_6
If GUICtrlRead($Combo_6) = '0 Дней' Then
GUICtrlSetState($Combo_4, $GUI_ENABLE)
GUICtrlSetState($Combo_5, $GUI_ENABLE)
Else
GUICtrlSetState($Combo_4, $GUI_DISABLE)
GUICtrlSetState($Combo_5, $GUI_DISABLE)
EndIf
Case $Combo
If GUICtrlRead($Combo) <> '1' Or GUICtrlRead($Combo) = '' Then
GUICtrlSetState($checkbox[1], $GUI_DISABLE)
GUICtrlSetState($checkbox[2], $GUI_DISABLE)
GUICtrlSetState($checkbox[3], $GUI_DISABLE)
GUICtrlSetState($checkbox[4], $GUI_DISABLE)
GUICtrlSetData($Combo_4, '', '')
GUICtrlSetData($Combo_4, '0 Файлов|10 Файлов|20 Файлов|30 Файлов|40 Файлов|50 Файлов|60 Файлов|70 Файлов|80 Файлов|90 Файлов|100 Файлов', '0 Файлов')
GUICtrlSetState($Combo_4, $GUI_DISABLE)
GUICtrlSetData($Combo_5, '', '')
GUICtrlSetData($Combo_5, '0 MB|10 MB|20 MB|30 MB|40 MB|50 MB|60 MB|70 MB|80 MB|90 MB|100 MB', '0 MB')
GUICtrlSetState($Combo_5, $GUI_DISABLE)
GUICtrlSetData($Combo_6, '', '')
GUICtrlSetData($Combo_6, '0 Дней|10 Дней|20 Дней|30 Дней|40 Дней|50 Дней|60 Дней|70 Дней|80 Дней|90 Дней|100 Дней', '0 Дней')
GUICtrlSetState($Combo_6, $GUI_DISABLE)
Else
GUICtrlSetState($checkbox[1], $GUI_ENABLE)
GUICtrlSetState($checkbox[2], $GUI_ENABLE)
GUICtrlSetState($checkbox[3], $GUI_ENABLE)
GUICtrlSetState($checkbox[4], $GUI_ENABLE)
GUICtrlSetData($Combo_4, '', '')
GUICtrlSetData($Combo_4, '0 Файлов|10 Файлов|20 Файлов|30 Файлов|40 Файлов|50 Файлов|60 Файлов|70 Файлов|80 Файлов|90 Файлов|100 Файлов', '0 Файлов')
GUICtrlSetState($Combo_4, $GUI_ENABLE)
GUICtrlSetData($Combo_5, '', '')
GUICtrlSetData($Combo_5, '0 MB|10 MB|20 MB|30 MB|40 MB|50 MB|60 MB|70 MB|80 MB|90 MB|100 MB', '0 MB')
GUICtrlSetState($Combo_5, $GUI_ENABLE)
GUICtrlSetData($Combo_6, '', '')
GUICtrlSetData($Combo_6, '0 Дней|10 Дней|20 Дней|30 Дней|40 Дней|50 Дней|60 Дней|70 Дней|80 Дней|90 Дней|100 Дней', '0 Дней')
GUICtrlSetState($Combo_6, $GUI_ENABLE)
EndIf
If GUICtrlRead($Combo_4) <> '0 Файлов' Then
GUICtrlSetState($Combo_4, $GUI_ENABLE)
GUICtrlSetState($Combo_5, $GUI_ENABLE)
GUICtrlSetState($Combo_6, $GUI_ENABLE)
Else
If GUICtrlRead($Combo_5) <> '0 MB' Then
GUICtrlSetState($Combo_4, $GUI_ENABLE)
GUICtrlSetState($Combo_5, $GUI_ENABLE)
GUICtrlSetState($Combo_6, $GUI_ENABLE)
Else
If GUICtrlRead($Combo_6) <> '0 Дней' Then
GUICtrlSetState($Combo_4, $GUI_ENABLE)
GUICtrlSetState($Combo_5, $GUI_ENABLE)
GUICtrlSetState($Combo_6, $GUI_ENABLE)
EndIf
EndIf
EndIf
$ProfCol = GUICtrlRead($Combo)
GUICtrlSetState($Combo, $GUI_DISABLE)
_WrColProf()
Case $Combo_2
If GUICtrlRead($Combo_2) = '0' Or GUICtrlRead($Combo_2) > '0' Then
GUICtrlSetState($Combo_2, $GUI_DISABLE)
EndIf
Case $Combo_3
If GUICtrlRead($Combo_3) = '.zip' Or GUICtrlRead($Combo_3) = '.7z' Then
GUICtrlSetState($Combo_3, $GUI_DISABLE)
EndIf
Case $Button_1
If GUICtrlRead($radio1) = $GUI_CHECKED Then
If $presbatton1 + 1 = $ProfCol Then
$sPath1 = FileSelectFolder('Выберите путь к профилю', '', 3, @DesktopDir, $hGui)
GUICtrlSetData($iEdit1, $sPath1)
_Wr1()
GUICtrlSetState($iEdit1, $GUI_DISABLE)
GUICtrlSetState($Button_1, $GUI_DISABLE)
Else
$sPath1 = FileSelectFolder('Выберите путь к профилю', '', 3, @DesktopDir, $hGui)
GUICtrlSetData($iEdit1, $sPath1)
_Wr1()
$presbatton1 += 1
EndIf
EndIf
If GUICtrlRead($radio2) = $GUI_CHECKED Then
$sPath1 = FileSelectFolder('Выберите путь к профилю', '', 3, @DesktopDir, $hGui)
GUICtrlSetData($iEdit1, $sPath1)
EndIf
If GUICtrlRead($radio3) = $GUI_CHECKED Then
$sPath1 = FileOpenDialog("Выбор резервной копии.", @DocumentsCommonDir, "(*.7z;*.zip)", 1 + 4)
GUICtrlSetData($iEdit1, $sPath1)
EndIf
Case $Button_2
If GUICtrlRead($radio1) = $GUI_CHECKED Then
If $presbatton2 + 1 = $ProfCol Then
$sPath2 = FileSelectFolder('Выберите путь для сохранения резервной копии', '', 3, @DesktopDir, $hGui)
GUICtrlSetData($iEdit2, $sPath2)
_Wr2()
GUICtrlSetState($iEdit2, $GUI_DISABLE)
GUICtrlSetState($Button_2, $GUI_DISABLE)
Else
$sPath2 = FileSelectFolder('Выберите путь для сохранения резервной копии', '', 3, @DesktopDir, $hGui)
GUICtrlSetData($iEdit2, $sPath2)
_Wr2()
$presbatton2 += 1
EndIf
EndIf
If GUICtrlRead($radio2) = $GUI_CHECKED Then
$sPath2 = FileSelectFolder('Выберите путь для сохранения резервной копии', '', 3, @DesktopDir, $hGui)
GUICtrlSetData($iEdit2, $sPath2)
EndIf
If GUICtrlRead($radio3) = $GUI_CHECKED Then
$sPath2 = FileSelectFolder('Выберите путь для сохранения резервной копии', '', 3, @DesktopDir, $hGui)
GUICtrlSetData($iEdit2, $sPath2)
EndIf
Case $Button_3
$presbatton3 += 1
If GUICtrlSetState($radio1, $GUI_CHECKED) Then
$StArh = GUICtrlRead($Combo_2)
$FormatArh = GUICtrlRead($Combo_3)
IniWrite($sPath_ini, 'Section Compression', 'Compression', $StArh)
IniWrite($sPath_ini, 'Section File Format', 'Format', $FormatArh)
If GUICtrlRead($Combo) = '1' Or $presbatton3 = '1' Then
If GUICtrlRead($Combo_4) <> '0 Файлов' Then
IniWrite($sPath_ini, 'Section SizeFolder', 'SizeFolder' & $presbatton3, '0 MB')
IniWrite($sPath_ini, 'Section ColDay', 'ColDay' & $presbatton3, '0 Дней')
IniWrite($sPath_ini, 'Section ColFiles', 'ColFiles' & $presbatton3, GUICtrlRead($Combo_4))
EndIf
If GUICtrlRead($Combo_5) <> '0 MB' Then
IniWrite($sPath_ini, 'Section ColFiles', 'ColFiles' & $presbatton3, '0 Файлов')
IniWrite($sPath_ini, 'Section ColDay', 'ColDay' & $presbatton3, '0 Дней')
IniWrite($sPath_ini, 'Section SizeFolder', 'SizeFolder' & $presbatton3, GUICtrlRead($Combo_5))
EndIf
If GUICtrlRead($Combo_6) <> '0 Дней' Then
IniWrite($sPath_ini, 'Section ColFiles', 'ColFiles' & $presbatton3, '0 Файлов')
IniWrite($sPath_ini, 'Section SizeFolder', 'SizeFolder' & $presbatton3, '0 MB')
IniWrite($sPath_ini, 'Section ColDay', 'ColDay' & $presbatton3, GUICtrlRead($Combo_6))
EndIf
$sPath1 = GUICtrlRead($iEdit1)
$sPath2 = GUICtrlRead($iEdit2)
IniWrite($sPath_ini, 'Section ProfPath', 'ProfPath' & $presbatton3, $sPath1)
IniWrite($sPath_ini, 'Section ProfArhPath', 'ProfArhPath' & $presbatton3, $sPath2)
If BitAND(GUICtrlRead($checkbox[1]), $GUI_CHECKED) Then
RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run", "BuckUpTorProf", "REG_SZ", @ScriptDir & '\' & @ScriptName)
EndIf
If BitAND(GUICtrlRead($checkbox[2]), $GUI_CHECKED) Then
IniWrite($sPath_ini, 'Section Clear', 'Clear death files', '1')
EndIf
If BitAND(GUICtrlRead($checkbox[3]), $GUI_CHECKED) Then
IniWrite($sPath_ini, 'Section Empty Folder', 'Del Empty Folders', '1')
EndIf
If BitAND(GUICtrlRead($checkbox[4]), $GUI_CHECKED) Then
IniWrite($sPath_ini, 'Section Empty File', 'Del Empty File', '1')
EndIf
Exit
EndIf
EndIf
Case $Button_4
_ArhBuckLive()
Case $Button_5
_ExtrArhLive()
Case $Button_6
FileDelete($sPath_ini)
Exit
EndSwitch
WEnd
EndFunc ;==>_GUICRT
Func _ColFilesDir()
If $SumProf <> '1' Then
Return
EndIf
$aFileColList = _FO_FileSearch($TestRead1, 'Prof-1*.7z|Prof-1*.zip', True, 125, 1)
If Not IsArray($aFileColList) Then
;MsgBox(1+48,'3', 'Не удалось получить количество архивных файлов'&@LF&'$aFileColList = 0')
Return
EndIf
$sArrayini10 = StringRegExp($sini, 'ColFiles1[\=](\d+)', 3)
If IsArray($sArrayini10) Then
$ColFiles = $sArrayini10[0]
Else
$ColFiles = 'error'
EndIf
If $ColFiles = 'error' Or $ColFiles = '' Or $ColFiles = '0' Then
Return
Else
; ########################################################################################
If $ColFiles < UBound($aFileColList) Then
Local $aFileColList_2D[$aFileColList[0] + 1][2] = [[$aFileColList[0]]]
For $i = 1 To $aFileColList[0]
$aFileColList_2D[$i][0] = $aFileColList[$i]
$aFileColList_2D[$i][1] = FileGetTime($aFileColList[$i], 0, 1)
Next
$aFileColList = 0 ; очищаем массив
_ArraySort($aFileColList_2D, 1, 1, UBound($aFileColList_2D) - 1, 1)
$aFileColList_2D[0][0] = UBound($aFileColList_2D, 1) - 2
For $i = 1 To UBound($aFileColList_2D, 1) - $ColFiles - 1
FileDelete($aFileColList_2D[$ColFiles + 1][0])
_ArrayDelete($aFileColList_2D, $ColFiles + 1)
Next
; ########################################################################################
Else
Return
EndIf
EndIf
EndFunc ;==>_ColFilesDir
Func _ClearFolderSize()
If $SumProf <> '1' Then
Return
EndIf
$sArrayini9 = StringRegExp($sini, 'SizeFolder1[\=](\d+)', 3)
If IsArray($sArrayini9) Then
$FolderSize = $sArrayini9[0]
Else
$FolderSize = 'error'
EndIf
$FileListFS = _FO_FileSearch($TestRead1, 'Prof-1*.7z|Prof-1*.zip', True, 125, 1)
If Not IsArray($FileListFS) Then
;MsgBox(1+48,'4', 'Не удалось получить имена архивных файлов'&@LF&'$FileListFS = 0')
Return
EndIf
_ArrayDelete($FileListFS, '0')
If $FolderSize = 'error' Or $FolderSize = '' Or $FolderSize = '0' Then
Return
Else
For $i = 1 To UBound($FileListFS)
If $FolderSize < Round((DirGetSize($TestRead1)) / 1024 / 1024) Then
$min = _ArrayMinIndex($FileListFS, 1)
$df = $FileListFS[$min]
FileDelete($df)
_ArrayDelete($FileListFS, $min)
$min = ''
$df = ''
Else
Return
ExitLoop
EndIf
Next
EndIf
$check = '5'
MsgBox('', '', $check)
If $check = '5' Then
Call(_ColFilesDir())
EndIf
EndFunc ;==>_ClearFolderSize
Func _ColFileDay()
If $SumProf <> '1' Then
Return
EndIf
$sArrayini11 = StringRegExp($sini, 'ColDay1[\=](\d+)', 3)
If IsArray($sArrayini11) Then
$ColDay = $sArrayini11[0]
Else
$ColDay = 'error'
EndIf
$FileListFD = _FO_FileSearch($TestRead1, 'Prof-1*.7z|Prof-1*.zip', True, 125, 1)
If Not IsArray($FileListFD) Then
;MsgBox(1+48,'5', 'Не удалось получить имена архивных файлов'&@LF&'$FileListFD = 0')
Return
EndIf
_ArraySort($FileListFD, 1, 1)
$aMax = _ArrayToString($FileListFD, '', 1, 1)
$tMax = FileGetTime($aMax)
_ArraySort($FileListFD)
$aMin = _ArrayToString($FileListFD, '', 1, 1)
$tMin = FileGetTime($aMin)
$aMax1God = StringRegExpReplace(_ArrayToString($tMax, '/'), '.\z', '')
$aMax1Time = StringRegExpReplace(_ArrayToString($tMax, '/'), '[\/]', ':')
$aMaxGod = StringRegExpReplace($aMax1God, '(.).......\z', ' ')
$aMaxTime = StringRegExpReplace($aMax1Time, '\A..........(.)', '')
$aMin1God = StringRegExpReplace(_ArrayToString($tMin, '/'), '.\z', '')
$aMin1Time = StringRegExpReplace(_ArrayToString($tMin, '/'), '[\/]', ':')
$aMinGod = StringRegExpReplace($aMin1God, '(.).......\z', ' ')
$aMinTime = StringRegExpReplace($aMin1Time, '\A..........(.)', '')
$iDateCalc = _DateDiff('D', $aMinGod & $aMinTime, $aMaxGod & $aMaxTime)
If $ColDay = 'error' Or $ColDay = '' Or $ColDay = '0' Then
Return
Else
If $iDateCalc > $ColDay Then
For $i = 1 To UBound($FileListFD) - 1
$min = _ArrayMinIndex($FileListFD, 1)
$df = $FileListFD[$min]
FileDelete($df)
_ArrayDelete($FileListFD, $min)
Next
Else
Return
EndIf
EndIf
EndFunc ;==>_ColFileDay
Func _WrColProf()
IniWrite($sPath_ini, 'Section ColProf', 'ColProf', $ProfCol)
EndFunc ;==>_WrColProf
Func _Wr1()
$sPath1 = GUICtrlRead($iEdit1)
IniWrite($sPath_ini, 'Section ProfPath', 'ProfPath' & $presbatton1 + 1, $sPath1)
EndFunc ;==>_Wr1
Func _Wr2()
$sPath2 = GUICtrlRead($iEdit2)
IniWrite($sPath_ini, 'Section ProfArhPath', 'ProfArhPath' & $presbatton2 + 1, $sPath2)
EndFunc ;==>_Wr2
Файлы: https://www.dropbox.com/sh/hq89hqpb0l09ywh/oY-yPvZFVI
Снимок:
История версий:
1.0.0.2
Добавил функцию очистки профиля от "мертвых" файлов.
Добавил функцию удаления пустых папок из папок загрузки.
Добавил функцию удаления "лишних" торрент файлов из папок загрузки.
Теперь при запуске программы не будет отображаться графический интерфейс при наличии в BTF.ini записей о пути к профилю и пути для сохранения резервной копии.
Добавил функцию очистки профиля от "мертвых" файлов.
Добавил функцию удаления пустых папок из папок загрузки.
Добавил функцию удаления "лишних" торрент файлов из папок загрузки.
Теперь при запуске программы не будет отображаться графический интерфейс при наличии в BTF.ini записей о пути к профилю и пути для сохранения резервной копии.
Источник: autoit-script.ru
Автор(ы): ivsatel