Что нового

[Сеть, интернет, FTP] перенос bat в AutoIt

_Aen_

Новичок
Сообщения
3
Репутация
0
Версия AutoIt: v3.3.8.1

Описание:
Добрый день! есть батник и конфиг к нему, хочется перенести их в AutoIt

Примечания:
батник
Код:
@echo off
cls
if not exist D:\OSTATKI mkdir D:\OSTATKI\
if not exist D:\OSTATKI\1 mkdir D:\OSTATKI\1

@echo Соединение с FTP-сервером 
ftp -v -i -s:Configs_ost\1.txt
@echo Остатки успешно скопированы

@echo Обновляем остатки в офисе
@echo Резервирование копии базы . . .
move \\fileserver\AN\base\1\MAINSKLAD.FDB \\fileserver\AN\base\RESERVE\1
@echo Распаковка файла базы
Configs_ost\7-Zip\7z.exe e D:\OSTATKI\1\BASE.7z -oD:\OSTATKI\1\ -y
copy D:\OSTATKI\1\MAINSKLAD.FDB \\fileserver\AN\base\1
@echo Завершено
pause

конфиг
Код:
open 0.0.0.0
username
pass
cd Export
lcd D:\OSTATKI\1
binary
get BASE.7z
disconnect
quit
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Как то так:

Код:
DirCreate('D:\OSTATKI\1')

ConsoleWrite('Соединение с FTP-сервером ' & @CRLF)
Run('ftp -v -i -s:Configs_ost\1.txt', '', @SW_HIDE)
ConsoleWrite('Остатки успешно скопированы' & @CRLF)

ConsoleWrite('Обновляем остатки в офисе' & @CRLF)
ConsoleWrite('Резервирование копии базы . . .' & @CRLF)
FileMove('\\fileserver\AN\base\1\MAINSKLAD.FDB', '\\fileserver\AN\base\RESERVE\1')

ConsoleWrite('Распаковка файла базы' & @CRLF)
Run('Configs_ost\7-Zip\7z.exe e D:\OSTATKI\1\BASE.7z -oD:\OSTATKI\1\ -y', '', @SW_HIDE)
FileCopy('D:\OSTATKI\1\MAINSKLAD.FDB', '\\fileserver\AN\base\1')

ConsoleWrite('Завершено' & @CRLF)
 
Автор
A

_Aen_

Новичок
Сообщения
3
Репутация
0
Run('ftp -v -i -s:Configs_ost\1.txt', '', @SW_HIDE) к ФТП не конектицо

решил оставить на батниках т.к. их 50+, но сделать в GUI интерфейс с кнопками
простые батники и *.ехе работают все ок, но те что отправляют/забирают с ФТП не работают, что накидал

Код:
#include <GUIConstantsEx.au3>

_Main()

Func _Main()
	Local $filemenu, $fileitem, $recentfilesmenu, $separator1
	Local $exititem, $helpmenu, $aboutitem, $okbutton, $cancelbutton
	Local $msg, $file
	#forceref $separator1

	GUICreate("RUN", 600, 700)

	$filemenu = GUICtrlCreateMenu("File")	
	$exititem = GUICtrlCreateMenuItem("Exit", $filemenu)
	

	$okbutton = GUICtrlCreateButton("Удаление старых накладных", 30, 50, 250, 20)
    $okbutton1 = GUICtrlCreateButton("Отправка накладных"      , 30, 80, 250, 20)

    $okbutton20 = GUICtrlCreateButton("Импорт остатков М" , 300, 50, 250, 20)
	$okbutton21 = GUICtrlCreateButton("Импорт остатков Ф"      , 300, 80, 250, 20)
	$okbutton22 = GUICtrlCreateButton("Импорт остатков З"    , 300, 110, 250, 20)
	$okbutton23 = GUICtrlCreateButton("Импорт остатков К"      , 300, 140, 250, 20)
	$okbutton24 = GUICtrlCreateButton("Импорт остатков У"    , 300, 170, 250, 20)
	$okbutton25 = GUICtrlCreateButton("Импорт остатков Д" , 300, 200, 250, 20)
	$okbutton26 = GUICtrlCreateButton("Импорт остатков В"    , 300, 230, 250, 20)
	$okbutton27 = GUICtrlCreateButton("Импорт остатков К"    , 300, 260, 250, 20)
	$okbutton28 = GUICtrlCreateButton("Импорт остатков Ка"       , 300, 290, 250, 20)
	$okbutton29 = GUICtrlCreateButton("Импорт остатков Ма"   , 300, 320, 250, 20)
	$okbutton30 = GUICtrlCreateButton("Импорт остатков П"   , 300, 350, 250, 20)
	
	
	$okbutton8 = GUICtrlCreateButton("Остатки ALL"                  , 30, 200, 250, 20)
	$okbutton9 = GUICtrlCreateButton("Плеханова с Флешки"           , 30, 230, 250, 20)
	$okbutton10 = GUICtrlCreateButton("Копия Base М"      , 30, 330, 250, 20)
	$okbutton11 = GUICtrlCreateButton("Копия Base Ф"           , 30, 360, 250, 20)
	$okbutton12 = GUICtrlCreateButton("Копия Base З"         , 30, 390, 250, 20)
	$okbutton13 = GUICtrlCreateButton("Копия Base К"           , 30, 420, 250, 20)
	$okbutton14 = GUICtrlCreateButton("Копия Base У"         , 30, 450, 250, 20)
	$okbutton15 = GUICtrlCreateButton("Копия Base Д"      , 30, 480, 250, 20)
	$okbutton16 = GUICtrlCreateButton("Копия Base В"         , 30, 510, 250, 20)
	$okbutton17 = GUICtrlCreateButton("Копия Base Ку"         , 30, 540, 250, 20)
	$okbutton18 = GUICtrlCreateButton("Копия Base Ка"            , 30, 570, 250, 20)
	$okbutton19 = GUICtrlCreateButton("Копия Base Ма"        , 30, 600, 250, 20)
	
	$cancelbutton = GUICtrlCreateButton("Exit", 520, 650, 70, 20)

    GUISetState()


	While 1
		$msg = GUIGetMsg()


		Select
		   Case $msg = $GUI_EVENT_CLOSE Or $msg = $cancelbutton
		 ExitLoop	
			Case $msg = $exititem
		 ExitLoop
			Case $msg = $okbutton
			ShellExecute("D:\RUN\Батники\Удаление старых накладных.bat", "" ,"c:\")
            Case $msg = $okbutton1
			ShellExecute("D:\RUN\Батники\Отправка накладных.bat", "" ,"c:\")				
				
			    Case $msg = $okbutton20
				ShellExecute("D:\RUN\Закачка остатков\М\ZakOstatki.exe", "" ,"c:\")
			    Case $msg = $okbutton21
				ShellExecute("D:\RUN\Закачка остатков\Ф\ZakOstatki.exe", "" ,"c:\")
			    Case $msg = $okbutton22
				ShellExecute("D:\RUN\Закачка остатков\З\ZakOstatki.exe", "" ,"c:\")
			    Case $msg = $okbutton23
				ShellExecute("D:\RUN\Закачка остатков\К\ZakOstatki.exe", "" ,"c:\")			
			    Case $msg = $okbutton24
				ShellExecute("D:\RUN\Закачка остатков\У\ZakOstatki.exe", "" ,"c:\")
			    Case $msg = $okbutton25
				ShellExecute("D:\RUN\Закачка остатков\Д\ZakOstatki.exe", "" ,"c:\")
			    Case $msg = $okbutton26
				ShellExecute("D:\RUN\Закачка остатков\В\ZakOstatki.exe", "" ,"c:\")
			    Case $msg = $okbutton27
				ShellExecute("D:\RUN\Закачка остатков\Ку\ZakOstatki.exe", "" ,"c:\")
			    Case $msg = $okbutton28
				ShellExecute("D:\RUN\Закачка остатков\Ка\ZakOstatki.exe", "" ,"c:\")
			    Case $msg = $okbutton29
				ShellExecute("D:\RUN\Закачка остатков\Ма\ZakOstatki.exe", "" ,"c:\")
			    Case $msg = $okbutton30
				ShellExecute("D:\RUN\Закачка остатков\П\ZakOstatki.exe", "" ,"c:\")
				
				Case $msg = $okbutton8
				ShellExecute("D:\RUN\Батники\Остатки ALL.bat", "" ,"c:\")
				Case $msg = $okbutton9
				ShellExecute("D:\RUN\Батники\Копия баз.bat", "" ,"c:\")
				Case $msg = $okbutton10
				ShellExecute("D:\RUN\Батники\М.bat", "" ,"c:\")
				Case $msg = $okbutton11
				ShellExecute("D:\RUN\Батники\Ф.bat", "" ,"c:\")
				Case $msg = $okbutton12
				rem ShellExecute("D:\RUN\Батники\З.bat", "" ,"c:\")
				Case $msg = $okbutton13
				ShellExecute("D:\RUN\Батники\Ки.bat", "" ,"c:\")
				Case $msg = $okbutton14
				ShellExecute("D:\RUN\Батники\у.bat", "" ,"c:\")
				Case $msg = $okbutton15
				ShellExecute("D:\RUN\Батники\Д.bat", "" ,"c:\")
				Case $msg = $okbutton16
				ShellExecute("D:\RUN\Батники\В.bat", "" ,"c:\")
				Case $msg = $okbutton17
				ShellExecute("D:\RUN\Батники\Ку.bat", "" ,"c:\")
				Case $msg = $okbutton18
				ShellExecute("D:\RUN\Батники\Ка.bat", "" ,"c:\")
				Case $msg = $okbutton19
				ShellExecute("D:\RUN\Батники\Ма.bat", "" ,"c:\")				
			
		EndSelect
	WEnd

	GUIDelete()



	Exit
EndFunc


батники напрямую работают все ОК, через GUI интерфейс батник не видит конфиг с настройками ФТП

Код:
Соединение с FTP-сервером 
ошибка открытия файла макросаConfigs_ost\1.txt
 
Автор
A

_Aen_

Новичок
Сообщения
3
Репутация
0
проблему с отправкой на ФТП решил
Код:
Func _FTPOpen($s_Agent, $l_AccessType = 1, $s_ProxyName = '', $s_ProxyBypass = '', $l_Flags = 0)
	
	local $handles[6]
	$handles[1]=DllOpen("wininet.dll")
	
	Local $ai_InternetOpen = DllCall($handles[1], 'long', 'InternetOpen', 'str', $s_Agent, 'long', $l_AccessType, 'str', $s_ProxyName, 'str', $s_ProxyBypass, 'long', $l_Flags)
	If @error OR $ai_InternetOpen[0] = 0 Then
		SetError(-1)
		Return 0
	EndIf
	
	$handles[2]=$ai_InternetOpen[0]
	
	Return $handles
	
EndFunc ;==> _FTPOpen()

Func _FTPConnect(ByRef $l_InternetSession, $s_ServerName, $s_Username, $s_Password, $i_ServerPort = 21, $l_Service = 1, $l_Flags = 0, $l_Context = 0)

	If $l_Flags = 1 Then $l_Flags = 0x08000000

	Local $ai_InternetConnect = DllCall($l_InternetSession[1], 'long', 'InternetConnect', 'long', $l_InternetSession[2], 'str', $s_ServerName, 'int', $i_ServerPort, 'str', $s_Username, 'str', $s_Password, 'long', $l_Service, 'long', $l_Flags, 'long', $l_Context)
	If @error OR $ai_InternetConnect[0] = 0 Then
		SetError(-1)
		Return 0
	EndIf
	
	$l_InternetSession[3]=$ai_InternetConnect[0]
			
	Return 1
	
EndFunc ;==> _FTPConnect()

Func _FTPPutFolderContents(ByRef $l_FTPSession, $s_LocalFolder, $s_RemoteFolder, $b_RecursivePut=1, $b_Pattern="*.*")
	
    local $search = FileFindFirstFile($s_LocalFolder & "\" & $b_Pattern)
	
	If @error Then Return SetError(1, 0, 0)
    If $search = -1 Then Return SetError(2, 0, 0)
    
    While 1
        local $file = FileFindNextFile($search)
        If @error Then ExitLoop
        If StringInStr(FileGetAttrib($s_LocalFolder & "\" & $file), "D") Then
            _FTPMakeDir($l_FTPSession, $s_RemoteFolder & "/" & $file)
            If $b_RecursivePut Then
                _FTPPutFolderContents($l_FTPSession, $s_LocalFolder & "\" & $file, $s_RemoteFolder & "/" & $file, $b_RecursivePut)
            EndIf
        Else
            _FTPPutFile($l_FTPSession, $s_LocalFolder & "\" & $file, $s_RemoteFolder & "/" & $file, 0, 0)
        EndIf
	WEnd

	FileClose($search)

	Return 1
	
EndFunc ;==>_FTPPutFolderContents

Func _FTPClose($l_InternetSession)
	
	Local $ai_InternetCloseHandle = DllCall($l_InternetSession[1], 'int', 'InternetCloseHandle', 'long', $l_InternetSession[2])
	DLLClose($l_InternetSession[1])
	If @error OR $ai_InternetCloseHandle[0] = 0 Then
		SetError(-1)
		Return 0
	EndIf
	
	
	Return $ai_InternetCloseHandle[0]
	
EndFunc ;==> _FTPClose()


сам скрипт на отправку
Код:
$server = '0.0.0.0' ;Металлургов
                   $username = 'имя'
                   $pass = 'пароль'
                   $Hand = _FTPOpen('Doesnt Matter')
				   $folder = 'import' 
                   _FTPConnect($Hand, $server, $username, $pass)
                   if @error then msgbox(0,"ОШИБКА","НЕТ соединения с Аптекой Металлургов")
                   _FTPPutFolderContents($Hand, '\\Fileserver\накладные в аптеки\Металлургов', "/import" ) 
                   if @error then msgbox(0,"ОШИБКА","НЕТ накладных в папке Металлургов")
                   _FTPClose($Hand)	
				   
       $server = '0.0.0.0'  ;Фучика 
                   $username = 'имя'
                   $pass = 'пароль'
                   $Hand = _FTPOpen('Doesnt Matter')
				   $folder = 'import' 
                   _FTPConnect($Hand, $server, $username, $pass)
                   if @error then msgbox(0,"ОШИБКА","НЕТ соединения с Аптекой Фучика")
                   _FTPPutFolderContents($Hand, '\\Fileserver\накладные в аптеки\Фучика', "/import" ) 
                   if @error then msgbox(0,"ОШИБКА","НЕТ накладных в папке Фучика")
                   _FTPClose($Hand)


вопрос как сделать, чтоб между конектами (их у меня 20шт ) к ФТП была пауза 1-1,5 сек,
и после отправки сообщение чтото типа ( Металлургов отправлено 5 файлов, Фучика отправлено 12 файлов) и т.д. по всем отправлениям

п.с. вопрос если ограничения на количество строк в скрипте? у меня уже за 2к строк, а я есче половину чего хочу не сделал
 

cnm

Новичок
Сообщения
58
Репутация
2
OffTopic:
п.с. вопрос если ограничения на количество строк в скрипте? у меня уже за 2к строк, а я есче половину чего хочу не сделал

Как я завидую тому админу, что придет на твое место. Сколько ему гарантируется секаса

:laugh:



Нет, но лучше выдели отдельные работающие функции в отдельный модуль. Тебе будет легче разбираться потом.
 

MnM

Post-Hardcore
Сообщения
679
Репутация
90
cnm сказал(а):
отдельный модуль
Если вы имели в виду в отдельный файл(#include\udf) то при преобразовании в exe все равно будет столько же строк если все udf(подключаемые в скрипт) "вклинить" в 1 файл.
_Aen_ сказал(а):
если ограничения на количество строк в скрипте? у меня уже за 2к строк
Это далеко не предел еще, бывают и по 10к строк(ограничения на кол-во строк в скрипте пока что ни где не читал)


Добавлено:
Сообщение автоматически объединено:

Прошелся обусфактором по своему проекту, получилось 36070 строк и вполне работает как часы
 
Верх