Здравствуйте!
недавно начал изучать AutoIt и в первом же скрипте застопорился:
В этом скрипте задача виснет на предпоследнем "Case $Start_Copy_Rar", не могу понять - почему...
Если поменять местами "Case $Start_Copy_Rar" и "Case $Start_Copy_Only", то будет зависать уже "Case $Start_Copy_Only".
Подскажите, пожалуйста, где ошибка?
недавно начал изучать AutoIt и в первом же скрипте застопорился:
В этом скрипте задача виснет на предпоследнем "Case $Start_Copy_Rar", не могу понять - почему...
Если поменять местами "Case $Start_Copy_Rar" и "Case $Start_Copy_Only", то будет зависать уже "Case $Start_Copy_Only".
Подскажите, пожалуйста, где ошибка?
Код:
; Подключение модулей
#include <GUIConstantsEx.au3>
#include <ButtonConstants.au3>
$Path_Folder_From = "c:\Post\___Script___\Test" ;Переменная - Папка "Откуда копировать"
$Folder_Input = $Path_Folder_From ; Переменная - Конечная папка "Откуда копировать", будет использоваться в дальнейшем
$Path_Winrar = "c:\Program Files\WinRAR\WinRAR.exe" ;Переменная - "Архиватор WinRAR"
$Stroka = 0 ;Переменная - Значение Y - для вывода текста в определенной строке
;Переменные - ip-адрес сервера
$Net_Filial1 = "192.168.105.1"
$Net_Filial2 = "213.180.204.11"
$Net_Filial3 = "4.4.4.4"
$Net_Filial4 = "127.0.0.1"
$Net_Filial5 = "8.8.8.8"
;Переменные - Папки "Куда копировать"
$Folder_Path_Filial1 = "d:\Post\___Script___\Test\А"
$Folder_Path_Filial2 = "d:\Post\___Script___\Test\Б"
$Folder_Path_Filial3 = "d:\Post\___Script___\Test\В"
$Folder_Path_Filial4 = "d:\Post\___Script___\Test\Г"
$Folder_Path_Filial5 = "d:\Post\___Script___\Test\Д"
$Folder_Test_Filial1 = "d:\Post\___Script___\Test\А"
$Folder_Test_Filial2 = "d:\Post\___Script___\Test\Б"
$Folder_Test_Filial3 = "d:\Post\___Script___\Test\В"
$Folder_Test_Filial4 = "d:\Post\___Script___\Test\Г"
$Folder_Test_Filial5 = "d:\Post\___Script___\Test\Д"
; Создание окна
$Main_Form = GUICreate("Копирование БД на серверы", 600, 400, -1, -1) ; Главное окно в центре экрана
GUISetIcon("C:\Windows\System32\shell32.dll", -131) ; Указание иконки окна
GUISetFont(10, 400, 0, "Microsoft Sans Serif") ; Параметры шрифта - Стандартные
; Рамка "Откуда копировать"
$Border_From_Copy = GUICtrlCreateGroup("Откуда копировать", 10, 10, 580, 50)
GUICtrlSetFont(-1, 9, 400, 0, "Microsoft Sans Serif") ; Параметры шрифта - Уменьшение
; Путь к папке "Откуда копировать"
$Stroka_Path_Input = GUICtrlCreateInput($Path_Folder_From, 16, 27, 537, 26)
GUICtrlSetState(-1, $GUI_DISABLE) ; Делаем поле "Только для чтения"
GUICtrlSetLimit(-1, 250) ; Длина строки
GUICtrlSetFont(-1, 10, 400, 0, "Verdana") ; Параметры шрифта - Стандартные
; Кнопка выбора папки
$Button_Path_From = GUICtrlCreateButton('-', 559, 27, 26, 26, $BS_ICON)
GUICtrlSetImage(-1, @SystemDir & '\shell32.dll', 4, 0)
GUISetState()
; Рамка "Путь к архиватору WinRAR"
$Border_WinRAR = GUICtrlCreateGroup("Путь к архиватору WinRAR", 10, 335, 580, 50)
GUICtrlSetFont(-1, 9, 400, 0, "Microsoft Sans Serif") ; Параметры шрифта - Уменьшение
; Путь к папке Архиватор
$Path_WinRAR_Input = GUICtrlCreateInput($Path_Winrar, 16, 352, 537, 26)
GUICtrlSetState(-1, $GUI_DISABLE) ; Делаем поле "Только для чтения"
GUICtrlSetLimit(-1, 250) ; Длина строки
GUICtrlSetFont(-1, 10, 400, 0, "Verdana") ; Параметры шрифта - Стандартные
; Кнопка выбора папки
$Button_Path_WinRAR = GUICtrlCreateButton('-', 559, 352, 26, 26, $BS_ICON)
GUICtrlSetImage(-1, @SystemDir & '\shell32.dll', 4, 0)
GUISetState()
; Рамка "Куда копировать"
$Border_To_Copy = GUICtrlCreateGroup("Куда копировать", 10, 70, 580, 130)
GUICtrlSetFont(-1, 9, 400, 0, "Microsoft Sans Serif") ; Параметры шрифта - Уменьшение
; Чекбокс "Сервер Филиала 1"
$Check_Filial1 = GUICtrlCreateCheckbox("Сервер Филиала 1", 20, 88, 135, 20) ; Сам чекбокс
GUICtrlSetState(-1, $GUI_CHECKED) ; Чекбок отмечен
GUICtrlSetDefColor(0x999999) ; Меняем цвет на серый
$Content_Check_Filial1 = GUICtrlCreateLabel(' ( ' & $Folder_Path_Filial1 & ' )', 160, 90, 425, 17) ; Дописываем путь назначения
GUICtrlSetDefColor(0x000000) ; Меняем цвет на черный
; Чекбокс "Сервер Филиала 2"
$Check_Filial2 = GUICtrlCreateCheckbox("Сервер Филиала 2", 20, 108, 135, 20) ; Сам чекбокс
GUICtrlSetState(-1, $GUI_CHECKED) ; Чекбок отмечен
GUICtrlSetDefColor(0x999999) ; Меняем цвет на серый
$Content_Check_Filial2 = GUICtrlCreateLabel(' ( ' & $Folder_Path_Filial2 & ' )', 160, 110, 425, 17) ; Дописываем путь назначения
GUICtrlSetDefColor(0x000000) ; Меняем цвет на черный
; Чекбокс "Сервер Филиала 3"
$Check_Filial3 = GUICtrlCreateCheckbox("Сервер Филиала 3", 20, 128, 135, 20) ; Сам чекбокс
GUICtrlSetState(-1, $GUI_CHECKED) ; Чекбок отмечен
GUICtrlSetDefColor(0x999999) ; Меняем цвет на серый
$Content_Check_Filial3 = GUICtrlCreateLabel(' ( ' & $Folder_Path_Filial3 & ' )', 160, 130, 425, 17) ; Дописываем путь назначения
GUICtrlSetDefColor(0x000000) ; Меняем цвет на черный
; Чекбокс "Сервер Филиала 4"
$Check_Filial4 = GUICtrlCreateCheckbox("Сервер Филиала 4", 20, 148, 135, 20) ; Сам чекбокс
GUICtrlSetState(-1, $GUI_CHECKED) ; Чекбок отмечен
GUICtrlSetDefColor(0x999999) ; Меняем цвет на серый
$Content_Check_Filial4 = GUICtrlCreateLabel(' ( ' & $Folder_Path_Filial4 & ' )', 160, 150, 425, 17) ; Дописываем путь назначения
GUICtrlSetDefColor(0x000000) ; Меняем цвет на черный
; Чекбокс "Сервер Филиала 5"
$Check_Filial5 = GUICtrlCreateCheckbox("Сервер Филиала 5", 20, 168, 135, 20) ; Сам чекбокс
GUICtrlSetState(-1, $GUI_CHECKED) ; Чекбок отмечен
GUICtrlSetDefColor(0x999999) ; Меняем цвет на серый
$Content_Check_Filial5 = GUICtrlCreateLabel(' ( ' & $Folder_Path_Filial5 & ' )', 160, 170, 425, 17) ; Дописываем путь назначения
GUICtrlSetDefColor(0x000000) ; Меняем цвет на черный
; Кнопка "Упаковать и скопировать"
$Start_Copy_Rar = GUICtrlCreateButton("Упаковать и скопировать", 10, 210, 285, 25)
; Кнопка "Только скопировать"
$Start_Copy_Only = GUICtrlCreateButton("Только скопировать", 305, 210, 285, 25)
; Рамка описания "Упаковать и скопировать"
$Border_WinRAR_And_Copy = GUICtrlCreateGroup("", 10, 240, 285, 90)
GUICtrlSetFont(-1, 9, 400, 0, "Microsoft Sans Serif")
GUICtrlCreateGroup("", -99, -99, 1, 1)
; Текст описания "Упаковать и скопировать"
GUICtrlSetDefColor(0x666666) ; Меняем цвет на серый
$Text_Content_001 = GUICtrlCreateLabel('Все файлы будут упакованы в архив "Test.rar", который будет скопирован на серверы в папку:' & @CRLF & 'G:\_Обновления_\' & @YEAR & '_' & @MON & '_' & @MDAY & '\', 20, 250, 270, 75)
GUICtrlSetDefColor(0x000000) ; Меняем цвет на черный
; Рамка описания "Только скопировать"
$Border_Only_Copy = GUICtrlCreateGroup("", 305, 240, 285, 90)
GUICtrlSetFont(-1, 9, 400, 0, "Microsoft Sans Serif")
GUICtrlCreateGroup("", -99, -99, 1, 1)
; Текст описания "Только скопировать"
GUICtrlSetDefColor(0x666666) ; Меняем цвет на серый
$Text_Content_002 = GUICtrlCreateLabel('Все файлы будут просто скопированы на серверы в папку БД:' & @CRLF & 'G:\BD\', 315, 250, 270, 75)
GUICtrlSetDefColor(0x000000) ; Меняем цвет на черный
; Параметр вывода экрана поверх всех окон
GUISetState(@SW_SHOW, $Main_Form)
While 1
; Проверка нажатий клавиш
$hMsg = GUIGetMsg()
Switch $hMsg
; Закрытие окна программы
Case $GUI_EVENT_CLOSE
Exit
; Нажата кнопка выбора каталога "Откуда копировать"
Case $Button_Path_From
$Folder_Input = FileSelectFolder('Окуда копировать БД', $Path_Folder_From, -1, "C:\Post\BD", $Main_Form)
; Если пользователь не нажал отмену или не закрыл окно выбора каталога, то заносим полученный путь в поле ввода
If $Folder_Input = '' Then
MsgBox(16, "Ошибка", "В указанной папке: " & $Folder_Input & " нет файлов!" & @CRLF & @CRLF & "Выберите другую папку.")
EndIf
; Нажата кнопка "Путь к архиватору WinRAR"
Case $Button_Path_WinRAR
$File_WinRAR_Input = FileOpenDialog("Укажите путь в программе WinRAR", "C:\Program Files\WinRAR", "Программы (*.exe)", 1, "WinRAR.exe")
; Если пользователь не нажал отмену или не закрыл окно выбора каталога, то заносим полученный путь в поле ввода
If $File_WinRAR_Input <> '' Then
GUICtrlSetData($Path_Winrar, $File_WinRAR_Input)
EndIf
; Нажата кнопка "Упаковать и скопировать"
Case $Start_Copy_Rar
F_Clear_Window() ; Запуск функции очистки главного окна
; Архивирование БД
$Stroka = $Stroka + 30 ; Значение высоты строки для вывода 1 строки текста
GUICtrlCreateLabel("Архивирование БД ...", 20, $Stroka) ; Вывод строки о начале архивирования
RunWait ($Path_Winrar & ' a -ep1 -ibck -inul "' & $Folder_Input & '\Test.rar" "' & $Folder_Input & '\*.*"') ; Архивирование с ожиданием завершения
Sleep(2000) ; Пауза в 2 сек. для возможно подвисшего архиватора (у меня такое иногда бывает)
GUICtrlCreateLabel("ОК", 190, $Stroka) ; Вывод строки о завершении архивирования
; Копирование - Филиал 1 - если отмечено
If GUICtrlRead($Check_Filial1) = 1 Then
$Stroka = $Stroka + 20 ; Переход на следующую строку
GUICtrlCreateLabel("Копирование НСИ на сервер Филиала 1 ...", 20, $Stroka) ; Вывод строки о начале копирования на сервер Филиала 1
$Svyaz_Filial1 = Ping ($Net_Filial1) ; Проверка пинга до сервера
If $Svyaz_Filial1 Then ; Если сервер пингуется
DirCreate ($Folder_Path_Filial1) ; Создание папки на сервере
FileCopy($Folder_Input & "\Test.rar", $Folder_Path_Filial1, 1) ; Копирование файла с заменой
GUICtrlCreateLabel("ОК", 310, $Stroka) ; Вывод строки о завершении копирования
else ; Если сервер не пингуется
GUICtrlCreateLabel("Нет связи с сервером", 310, $Stroka) ; Вывод строки об ошибке копирования
EndIf
EndIf
; Копирование - Филиал 2 - если отмечено
If GUICtrlRead($Check_Filial2) = 1 Then
$Stroka = $Stroka + 20 ; Переход на следующую строку
GUICtrlCreateLabel("Копирование БД на сервер Филиала 2 ...", 20, $Stroka) ; Вывод строки о начале копирования на сервер Филиала 1
DirCreate ($Folder_Path_Filial2) ; Создание папки на сервере
FileCopy($Folder_Input & "\Test.rar", $Folder_Path_Filial2, 1) ; Копирование файла с заменой
GUICtrlCreateLabel("ОК", 315, $Stroka) ; Вывод строки о завершении копирования
EndIf
; Копирование - Филиала 3 - если отмечено
If GUICtrlRead($Check_Filial3) = 1 Then
$Stroka = $Stroka + 20 ; Переход на следующую строку
GUICtrlCreateLabel("Копирование БД на сервер Филиала 3 ...", 20, $Stroka) ; Вывод строки о начале копирования на сервер Филиала 1
DirCreate ($Folder_Path_Filial3) ; Создание папки на сервере
FileCopy($Folder_Input & "\Test.rar", $Folder_Path_Filial3, 1) ; Копирование файла с заменой
GUICtrlCreateLabel("ОК", 310, $Stroka) ; Вывод строки о завершении копирования
EndIf
; Копирование - Филиал 4 - если отмечено
If GUICtrlRead($Check_Filial4) = 1 Then
$Stroka = $Stroka + 20 ; Переход на следующую строку
GUICtrlCreateLabel("Копирование БД на сервер Филиала 4 ...", 20, $Stroka) ; Вывод строки о начале копирования на сервер Филиала 1
DirCreate ($Folder_Path_Filial4) ; Создание папки на сервере
FileCopy($Folder_Input & "\Test.rar", $Folder_Path_Filial4, 1) ; Копирование файла с заменой
GUICtrlCreateLabel("ОК", 312, $Stroka) ; Вывод строки о завершении копирования
EndIf
; Копирование - Филиал 5 - если отмечено
If GUICtrlRead($Check_Filial5) = 1 Then
$Stroka = $Stroka + 20 ; Переход на следующую строку
GUICtrlCreateLabel("Копирование БД на сервер Филиала 5 ...", 20, $Stroka) ; Вывод строки о начале копирования на сервер Филиала 1
DirCreate ($Folder_Path_Filial5) ; Создание папки на сервере
FileCopy($Folder_Input & "\Test.rar", $Folder_Path_Filial5, 1) ; Копирование файла с заменой
GUICtrlCreateLabel("ОК", 317, $Stroka) ; Вывод строки о завершении копирования
EndIf
; Нажата кнопка "Только скопировать"
Case $Start_Copy_Only
F_Clear_Window() ; Запуск функции очистки главного окна
$Stroka = $Stroka + 20 ; Переход на следующую строку
GUICtrlCreateLabel("Копирование БД на сервер Филиала 1 ...", 20, $Stroka) ; Вывод строки о начале копирования на сервер Филиала 1
FileCopy($Folder_Input & "\*.*", $Folder_Test_Filial1, 1) ; Копирование файла с заменой
GUICtrlCreateLabel("ОК", 310, $Stroka) ; Вывод строки о завершении копирования
; Вывод всплывающего сообщения об окончании копирования
TrayTip("Копирование БД завершено", "Не забудьте проверить индексы", 7, 1)
MsgBox(64, "Копирование БД на серверы", "Копирование файлов завершено." & @CRLF & "Необходимо проверить индексы на указанных ранее серверах.")
WinClose("Копирование БД на серверы", "")
EndSwitch
WEnd
Func F_Clear_Window()
; Удаление всех модулей в окне
GUICtrlSetState($Border_From_Copy, $GUI_HIDE)
GUICtrlSetState($Stroka_Path_Input, $GUI_HIDE)
GUICtrlSetState($Button_Path_From, $GUI_HIDE)
GUICtrlSetState($Border_WinRAR, $GUI_HIDE)
GUICtrlSetState($Path_WinRAR_Input, $GUI_HIDE)
GUICtrlSetState($Button_Path_WinRAR, $GUI_HIDE)
GUICtrlSetState($Border_To_Copy, $GUI_HIDE)
GUICtrlSetState($Check_Filial1, $GUI_HIDE)
GUICtrlSetState($Check_Filial2, $GUI_HIDE)
GUICtrlSetState($Check_Filial3, $GUI_HIDE)
GUICtrlSetState($Check_Filial4, $GUI_HIDE)
GUICtrlSetState($Check_Filial5, $GUI_HIDE)
GUICtrlSetState($Start_Copy_Rar, $GUI_HIDE)
GUICtrlSetState($Start_Copy_Only, $GUI_HIDE)
GUICtrlSetState($Border_WinRAR_And_Copy, $GUI_HIDE)
GUICtrlSetState($Text_Content_001, $GUI_HIDE)
GUICtrlSetState($Border_Only_Copy, $GUI_HIDE)
GUICtrlSetState($Text_Content_002, $GUI_HIDE)
GUICtrlSetState($Content_Check_Filial1, $GUI_HIDE)
GUICtrlSetState($Content_Check_Filial2, $GUI_HIDE)
GUICtrlSetState($Content_Check_Filial3, $GUI_HIDE)
GUICtrlSetState($Content_Check_Filial4, $GUI_HIDE)
GUICtrlSetState($Content_Check_Filial5, $GUI_HIDE)
; Рамка для текста
$Border_From_Copy = GUICtrlCreateGroup("", 10, 10, 580, 375)
EndFunc