Здравствуйте.
С одного сайта хочу скачать обновления для Windows2003. Хочу написать скрипт, чтоб проверял уже скачанные файлы, скачивал отсутвующие файлы с показом прогресса скачивания файла. С форума выдрал из разных скриптов куски и вот что получилось
ссылки на файлы в массиве $aLinks
список уже скачанных файлов в массиве $aFiles
Пока поставил, чтоб скачивался только 1 файл.
Теперь встает один вопрос. Как сделать Скачивание файлов по очереди один за другим после нажатия Кнопки?
P.S.: Как вычислить общий размер файлов которые надлежит скачиванию? (все "красные" файле, которые выдаст в ListView скрипт)
С одного сайта хочу скачать обновления для Windows2003. Хочу написать скрипт, чтоб проверял уже скачанные файлы, скачивал отсутвующие файлы с показом прогресса скачивания файла. С форума выдрал из разных скриптов куски и вот что получилось
Код:
#include <GUIConstantsEx.au3>
#include <GuiStatusBar.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>
#include <GuiImageList.au3>
#include <Array.au3>
#include <File.au3>
#include <GDIpProgress.au3>
Global $item_col = 0
Dim $aFiles
Dim $upd_list
$ListFile = @ScriptDir & "\upd_list.txt"
$hGUI = GUICreate('Обновления Windows2003', 500, 350)
$StatusBar1 = _GUICtrlStatusBar_Create($hGUI)
$Button1 = GUICtrlCreateButton("Button1", 392, 296, 75, 25)
;~ $Progress1 = GUICtrlCreateProgress(8, 312, 374, 16)
$hListView = _GUICtrlListView_Create($hGUI, "", 2, 2, 494, 268)
_GUICtrlListView_SetExtendedListViewStyle($hListView, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES))
$sID = _ProgressCreate(8, 312, 374, 16)
_ProgressSetText($sID, "%P%%")
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
; Load images
$hImage = _GUIImageList_Create()
_GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0xFF0000, 16, 16))
_GUIImageList_Add($hImage, _GUICtrlListView_CreateSolidBitMap($hListView, 0x00FF00, 16, 16))
_GUICtrlListView_SetImageList($hListView, $hImage, 1)
; Add columns
_GUICtrlListView_InsertColumn($hListView, 0, "Обновление", 100)
_GUICtrlListView_InsertColumn($hListView, 1, "Размер", 100)
_GUICtrlListView_InsertColumn($hListView, 2, "Ссылка", 100)
$sUrl = 'http://pw.bafa.ru/update_win2003.shtml'
$sHTML = BinaryToString(InetRead($sUrl))
$count = StringInStr($sHTML, "Исправления после Windows Server 2003 SP2 (английская версия)")
$result = StringTrimLeft($sHTML,$count)
_get_upd_list()
;~ _FileReadToArray($ListFile, $upd_list)
ConsoleWrite($sHTML)
$aLinks = StringRegExp($result, '["''](http://download.microsoft.com.*?)["'']', 3)
$aNames = StringRegExp($result, '([0-9].*)</a>
', 3)
$aSize = StringRegExp($result, '\(([0-9].*)\)<.*', 3)
;~ $test=StringRegExp($test, '([0-9].*)</a>
', 3) ; Названия
;~ $test=StringRegExp($test, '\((.*)\)</td>', 3) ; размер
;~ $test=StringRegExp($test, '(?s).*?http://.*/(.*)', 3)
for $i = 0 To UBound($aLinks)-1
$temp = StringRegExpReplace($aLinks[$i], '(?s).*?http://.*/(.*)', '\1')
;~ MsgBox(0,"",$temp)
$find = _ArraySearch($aFiles, $temp)
If $find == -1 Then
$item_col = 0
Else
$item_col = 1
EndIf
_GUICtrlListView_AddItem($hListView, $aNames[$i], $item_col)
_GUICtrlListView_AddSubItem($hListView, $i, $aSize[$i], 1)
_GUICtrlListView_AddSubItem($hListView, $i, $aLinks[$i], 2)
Next
GUISetState()
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
_exit()
Case $Button1
_download("http://download.microsoft.com/download/E/D/7/ED71C471-3229-4120-B9E3-F6B03D7D3714/WindowsServer2003-KB2508429-x86-ENU.exe", "WindowsServer2003-KB2508429-x86-ENU.exe")
EndSwitch
WEnd
Func _download($url, $fname)
$hDownload = InetGet($url, @ScriptDir & "\Updates\_" & $fname, 1, 1)
Do
Sleep(250)
Local $aData = InetGetInfo($hDownload)
$compleate=InetGetInfo( $hDownload,1)
$status=InetGetInfo( $hDownload,0)
$percent=Round($aData[0]/$aData[1]*100, 0)
If $percent >= 0 Then
_ProgressSet($sID, $percent)
EndIf
Until InetGetInfo($hDownload, 2) ; Check if the download is complete.
_FileRename( @ScriptDir & "\Updates\_" & $fname, $fname)
EndFunc
_FileRename($path, $newname); Переименование
Func _FileRename($sPath, $sNewFileName)
$aPath = StringSplit($sPath, '\');
$sFileName = $aPath[$aPath[0]]; Нахождение названия файла
$iLen = StringLen($sFileName); Вычисление длины названия файла
$sFileFolder = StringTrimRight($sPath, $iLen); Нахождение папки, которая содержит файл
$sPath_new = $sFileFolder & $sNewFileName; Задание нового пути файла (та же папка, но другое название)
FileMove($sPath, $sPath_new); Перемещение файла внутри одной папки = переименование файла
EndFunc
Func _exit()
Exit
EndFunc
Func _get_upd_list()
$aFiles = _FileListToArray(@ScriptDir & '\Updates', '*.exe', 1)
For $i = 0 To UBound ($aFiles) - 1
$find = StringRegExp($aFiles[$i], "_.*")
;~ MsgBox(0,"",$find)
If $find == 1 Then
FileDelete(@ScriptDir & '\Updates\' & $aFiles[$i])
EndIf
Next
$aFiles = _FileListToArray(@ScriptDir & '\Updates', '*.exe', 1)
_ArrayDisplay($aFiles)
EndFunc
список уже скачанных файлов в массиве $aFiles
Пока поставил, чтоб скачивался только 1 файл.
Теперь встает один вопрос. Как сделать Скачивание файлов по очереди один за другим после нажатия Кнопки?
P.S.: Как вычислить общий размер файлов которые надлежит скачиванию? (все "красные" файле, которые выдаст в ListView скрипт)