Что нового

[Автоматизация] Автоматизаци работы с профилем uTorrent

ivsatel

Продвинутый
Сообщения
319
Репутация
84
AutoIt: 3.3.8.1
Версия: 1.0.0.4

Категория: Автоматизация, Вспомогательные функции, Строки, Реестр, Окна и диалоги, Файловая система, Элементы GUI, Разное

Описание:
Программа для резервного копирования профиля uTorrent. Поддержка до 5-ти профилей. Возможность задать степень компрессии, и исходный формат архива. Так же возможен "откат" профиля.
Для сжатия используется архиватор 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 записей о пути к профилю и пути для сохранения резервной копии.

Источник: autoit-script.ru
Автор(ы): ivsatel
 
Верх