Скрипты для скачивания файлов
Модераторы: Avada, CaptainFlint, Nik, d-view, Моторокер
-
BeardFury78
- Сообщения: 213
- Зарегистрирован: Чт авг 25, 2016 05:24
А есть ли скрипт (или кто-то сможет сваять), который скачивает файлы по ссылкам из текстовых файлов, причем сохраняет их в определенные папки, чьи названия должны браться из текстовых файлов, где записаны ссылки? Пример: есть файлы "example1.txt" и "example2.txt", в первом файле записаны 3 ссылки, в другом - 11 ссылки. Хотелось бы чтобы можно было выделить эти текстовые файлы, нажать на кнопку скрипта и на другом панеле создаются папки "example1" и "example2" и по соответствующим ссылкам в первом папке скачиваются 3 файлов, а на другом - 11 файлов. Для меня это было бы очень удобно. Для информации: у меня есть много текстовых файлов с списками ссылок, по которым хотелось бы организовать удобное скачивания файлов в соответствующие папки. Ссылки все записаны построчно, кроме ссылок больше ничего нет, но могут быть пустые строки в конце файлов. Кодировка таких файлов - ANSI.
К слову, если кто знает такую программу, которая делает то же самое, то можно не писать скрипт, а просто подсказать её название, главное чтобы там можно было выбирать сразу несколько текстовых файлов и все файлы по ссылкам должны скачиваться в папки, соответствующие этим текстовым файлам.
К слову, если кто знает такую программу, которая делает то же самое, то можно не писать скрипт, а просто подсказать её название, главное чтобы там можно было выбирать сразу несколько текстовых файлов и все файлы по ссылкам должны скачиваться в папки, соответствующие этим текстовым файлам.
BeardFury78
Вряд ли есть программа, задача специфическая. Скачиваемые Файлы бинарные, или есть текстовые?
Вряд ли есть программа, задача специфическая. Скачиваемые Файлы бинарные, или есть текстовые?
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
-
BeardFury78
- Сообщения: 213
- Зарегистрирован: Чт авг 25, 2016 05:24
-
BeardFury78
- Сообщения: 213
- Зарегистрирован: Чт авг 25, 2016 05:24
-
BeardFury78
- Сообщения: 213
- Зарегистрирован: Чт авг 25, 2016 05:24
Zmy
Тяжеловатая программка. Почитал help (DownloadFromFile) и не увидел там такой возможности.
Тяжеловатая программка. Почитал help (DownloadFromFile) и не увидел там такой возможности.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Как нету?
Вот, создаём файл с таким содержимым.
http://progman13.wincmd.ru/downloads/wd ... er_1.0.zip ||C:\Temp\111\
http://progman13.wincmd.ru/downloads/wl ... 2_Beta.zip ||C:\Temp\222\
http://wincmd.ru/files/1236825/wdx_firstByte-0.3.zip ||C:\Temp\333\
И запускаем команду
C:\Temp\ClipWork.exe DownloadFromFile 5 C:\List.txt
Вот, создаём файл с таким содержимым.
http://progman13.wincmd.ru/downloads/wd ... er_1.0.zip ||C:\Temp\111\
http://progman13.wincmd.ru/downloads/wl ... 2_Beta.zip ||C:\Temp\222\
http://wincmd.ru/files/1236825/wdx_firstByte-0.3.zip ||C:\Temp\333\
И запускаем команду
C:\Temp\ClipWork.exe DownloadFromFile 5 C:\List.txt
BeardFury78
Код: Выделить всё
'•••••••••••••••••••••••••••• VBS •••••••••••••••••••••••••••
' Скачивание бинарных файлов по ссылкам выбранных txt-списков
' в создаваемые при необходимости папки c их базовыми имёнами
' Параметры: %WL "<путь получателя>"
' Ключ на протоколирование ошибок: /l
'••••••••••••••••••••••••••••••••••••••• Автор: Flasher © •••
Option Explicit : Dim List, Path, Log, Title, FSO, Dic, Reg, _
F, HTTP, URL, FN, Name, Ext, FType, File, All, Fold, FLog, Cnt
With WSH.Arguments
If .Count Then List = .Item(0) : Path = .Item(1) Else WSH.Quit
Log = .Named.Exists("l")
End With : Title = " Скачивание файлов"
Set FSO = CreateObject("Scripting.FileSystemObject")
Set Dic = CreateObject("Scripting.Dictionary")
Set Reg = New RegExp : Reg.IgnoreCase = True
Reg.Global = True : Reg.MultiLine = True
Reg.Pattern = "^\s*(https?://[^\r\n\s]+)"
Set HTTP = CreateObject("WinHttp.WinHttpRequest.5.1")
HTTP.Option(4) = 13056 : HTTP.Option(6) = True
HTTP.Option(12) = True : HTTP.Option(14) = 5
Set List = FSO.OpenTextFile(List,,,-1)
Do : File = List.ReadLine
If StrComp(FSO.GetExtensionName(File), "txt", 1) = 0 Then
If Len(File) > 259 Then File = "\\?\" & File
If FSO.GetFile(File).Size Then
With FSO.OpenTextFile(File) All = .ReadAll : .Close :End With
Fold = FSO.BuildPath(Path, FSO.GetBaseName(File))
If Len(Fold) > 259 Then Fold = "\\?\" & Fold
If Reg.Test(All) And Not FSO.FolderExists(Fold) Then FSO.CreateFolder Fold
If Log Then FLog = Left(File, InStrRev(File, ".") - 1) & " Errors.txt" :_
Dim LogFile : Set LogFile = FSO.CreateTextFile(FLog, 1)
For Each URL in Reg.Execute(All)
URL = URL.SubMatches(0) : FN = ""
If Not Dic.Exists(URL) Then
HTTP.Open "GET", URL, False
HTTP.SetRequestHeader "Pragma", "no-cache" : Dic.Add URL, ""
HTTP.SetRequestHeader "Cache-Control", "no-cache" : HTTP.Send
HTTP.WaitForResponse 5, True : URL = HTTP.Option(1)
FType = HTTP.GetResponseHeader("Content-Type")
If HTTP.Status = 200 And InStr(FType, "text/html") = 0 Then
On Error Resume Next
Name = HTTP.GetResponseHeader("Content-Disposition")
If Err.Number = 0 Then FN = Split(Name & """", """")(1)
On Error GoTo 0 : If FN = "" Then FN = FSO.GetFileName(URL) :_
FN = Mid(FN, InStrRev(FN, "?") + 1)
Ext = FSO.GetExtensionName(FN)
If Ext = "" Or IsNumeric(Ext) Then
Ext = Mid(FType, InStrRev(FType, "/") + 1)
If Len(Ext) Then FN = FN & "." & Ext
End If : F = FSO.BuildPath(Fold, FN)
If Len(F) > 259 And Left(F, 1) <> "\" Then F = "\\?\" & F
If Not FSO.FileExists(F) Then
With CreateObject("SAPI.SpFileStream")
.Format.Type = 1 : .Open F, 3, True
.Write HTTP.ResponseBody : .Close
End With : Cnt = Cnt + 1
End If
ElseIf Log Then LogFile.WriteLine URL
End If : HTTP.Abort
End If
Next : If Log Then LogFile.Close :_
If FSO.GetFile(FLog).Size = 0 Then FSO.DeleteFile FLog
End If
End If
Loop Until List.AtEndOfStream : List.Close : If Cnt Then _
MsgBox "Число скачанных файлов: " & Cnt, 4160, Title Else _
MsgBox "Нет подходящих объектов!", 4144, Title
Последний раз редактировалось Flasher Ср авг 30, 2017 05:17, всего редактировалось 5 раз.
Автору сборки TC Image (Andrey_A) настоятельно рекомендуется не распространять на иных ресурсах любую предоставленную мной где-либо техническую информацию по автоматизации и оптимизации в работе с ТС и системой.
Я тут сделал небольшую программку. Из выделенных списков URL создать папки, и загрузить все ссылки в именные папки.
У неё два обязательных параметра.
Command:
C:\Temp\DownloadFromFile.exe
Parameters:
"%T" 0 %P%S
https://cloud.mail.ru/public/8hPg/984s3oDba
.
У неё два обязательных параметра.
Command:
C:\Temp\DownloadFromFile.exe
Parameters:
"%T" 0 %P%S
https://cloud.mail.ru/public/8hPg/984s3oDba
.
Последний раз редактировалось Zmy Чт авг 17, 2017 13:29, всего редактировалось 3 раза.
-
BeardFury78
- Сообщения: 213
- Зарегистрирован: Чт авг 25, 2016 05:24
По итогам тестирования.
Скрипт от Flasher по началу работал нормально, папки как положено создались, туда качались файлы, но потом появилась ошибка:
Программа от Zmy работает как нужно, не заметил ни одной ошибки, все файлы скачиваются в нужные папки, нету файлов с размером в 162 байтов, в целом нету ни одного нарекания. Также потестил скорость скачивания: скрипт работал 23:21 с., скачано 505 мб, средняя скорость получается 378 кб/с, что немного пониже чем у скрипта, но это не критично. Тоже работой программы остался доволен, спасибо большое за работу.
Решил забрать оба варианты в коллекцию, буду чередовать их, на случай если один из вариантов по каким-то причинам откажется работать. Спасибо еще раз Flasher и Zmy!
Скрипт от Flasher по началу работал нормально, папки как положено создались, туда качались файлы, но потом появилась ошибка:
и на этом скрипт прекратил работу, остальные файлы из списков остались не скачанными. Решил посмотреть, что там в скрипте, увидел эту строку:Строка: 32
Символ: 61
Ошибка: Время ожидания операции истекло
Код: 80072EE5
Источник: WinHttp.WinHttpRequest
решил поменять 5 на 50 и после этого все теперь скачивается, больше не появилось ни одной ошибки. И еще обнаружил, что после завершения работы скрипта в папках встречаются файлы размером в 162 байтов и вьювер ничего не показывает после их открытия. Я открыл их блокнотом и оказалось, что они содержат этот текст:HTTP.WaitForResponse 5, True : URL = HTTP.Option(1)
Я посмотрел по именам таких файлов в списке ссылок, проверил эти ссылки в браузере и они все действительно выдают ошибку 404. Было бы хорошо внести такую правку, чтобы такие файлы не создавались или удалялись после завершения скрипта, так как они только замусоривают папки. Замерял скорость скачивания: скрипт работал 20:49, скачано 505 мб, средняя скорость выходит 424 кб/с. В целом скриптом остался доволен, все файлы были скачаны как положено, причем нету ни одного отсутствующего файла (сверял количество ссылок в файлах с количеством файлов в папках), просмотрел файлы в режиме эскизов, не встретил ни одного битого или незавершенного файла. Спасибо большое за скрипт.<html>
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>nginx</center>
</body>
</html>
Программа от Zmy работает как нужно, не заметил ни одной ошибки, все файлы скачиваются в нужные папки, нету файлов с размером в 162 байтов, в целом нету ни одного нарекания. Также потестил скорость скачивания: скрипт работал 23:21 с., скачано 505 мб, средняя скорость получается 378 кб/с, что немного пониже чем у скрипта, но это не критично. Тоже работой программы остался доволен, спасибо большое за работу.
Решил забрать оба варианты в коллекцию, буду чередовать их, на случай если один из вариантов по каким-то причинам откажется работать. Спасибо еще раз Flasher и Zmy!