Как скачать файлы из командной строки в Windows, такие как wget или curl

813399
Paolo Tedesco

Как я могу загрузить что-то из Интернета напрямую, не открывая браузер Internet Explorer или Firefox Acrobat Reader / Quicktime / MS Word / что угодно?

Я использую Windows, поэтому подойдет версия Wget для Windows .

295
Просто щелкните правой кнопкой мыши файл и нажмите «Сохранить объект как», «Сохранить ссылку как» или «Сохранить как» (язык зависит от вашего браузера). BrainSlugs83 11 лет назад 0
Смысл наличия команды в том, что вы можете написать командный файл и запустить его (возможно, запланированный как задача) в любое время. Вот где GUI терпит неудачу. Jbm 11 лет назад 20
Как вы загружаете с MS Word? Jaime Hablutzel 9 лет назад 3
@JaimeHablutzel Почему вы хотите скачать что-нибудь через MS Word? MS Word не является терминалом. Braden Best 8 лет назад 5
@ B1KМузыкальный взгляд на исходный вопрос, у меня были те же сомнения, что и у вас Jaime Hablutzel 8 лет назад 0
если всплывающее диалоговое окно для назначения / открытия в порядке, которое приходит из "автоматически открываемого-закрытого" Internet Explorer, вы можете использовать `"% programfiles% / Internet Explorer / iexplore.exe "http: // foo.bar / somefile` ( должен работать на многих системах) Andreas Dietrich 7 лет назад 0
Наступил 2016 год. Обязательно прокрутите вниз до ответов «Powershell». (Именно встроенное решение, которое вы хотите, когда вы ограничены IE и пытаетесь избежать установки случайных вещей на серверы клиента ...) mwardm 7 лет назад 0
Вот хорошая статья об использовании curl в PowerShell: http://thesociablegeek.com/azure/using-curl-in-powershell/ SDsolar 6 лет назад 0
@SDsolar Или просто повысить / улучшить [этот ответ] (https://superuser.com/questions/25538/how-to-download-files-from-command-line-in-windows-like-wget-is-doing/ 494009 # 494009) ниже. Franklin Yu 6 лет назад 1
Заметано. Я сделал это с полными инструкциями, которые будут работать с любой современной версией Windows - никаких дополнений или модификаций не требуется. SDsolar 6 лет назад 0

17 ответов на вопрос

280
Paolo Tedesco

Альтернатива, которую я недавно обнаружил, используя PowerShell:

$client = new-object System.Net.WebClient $client.DownloadFile("http://www.xyz.net/file.txt","C:\tmp\file.txt") 

Это работает также с запросами GET.

Если вам нужно указать учетные данные для загрузки файла, добавьте следующую строку между ними:

$client.Credentials = Get-Credential 

Появится стандартная подсказка учетных данных Windows. Учетные данные, которые вы введете, будут использованы для загрузки файла. Вам нужно сделать это только один раз за все время, пока вы будете использовать объект $ client.

Вы также можете сделать это в одну строку: `(новый объект System.Net.WebClient) .DownloadFile ('http://www.xyz.net/file.txt','C:\tmp\file.txt' ) ` schellack 12 лет назад 82
Это было бы совсем не похоже на wget, если бы только для того, чтобы использовать его, нужно установить еще одну большую программу. Rob 11 лет назад 0
@Rob PowerShell встроен в Windows ... nhinkle 11 лет назад 15
С Vista, да. Arran 11 лет назад 8
Re @Arran: «От Vista, да» - так ... последние шесть лет (сейчас 7), да, это было встроено в Windows. BrainSlugs83 10 лет назад 1
@ BrainSlugs83, конечно, но многие, многие люди все еще используют XP. Это просто что-то иметь в виду. Arran 10 лет назад 3
@ BrainSlugs83, вы недооцениваете количество людей, все еще работающих на старых системах Windows. Я не понимаю проблему, я указал, что это только на Vista и выше. Люди могут проигнорировать это или сказать «эй, спасибо!», Но вы…? Если у вас есть проблемы, создайте чат, и мы можем поговорить. Кто-то с репутацией (как и вы) должен понимать * здесь * не место для этой дискуссии. Arran 10 лет назад 4
Я просто указываю на то, что пояснения немного глупы, поскольку они встроены в окна, пока они существуют - и во всех поддерживаемых в настоящее время версиях Windows они есть. Ничего более. BrainSlugs83 10 лет назад 2
Что если вам нужна аутентификация для сайта https и вы находитесь за прокси-сервером? opticyclic 9 лет назад 0
Есть ли возможность увидеть ход загрузки? Devesh Khandelwal 8 лет назад 0
Я не уверен, изменилось ли это в какой-то версии Powershell, но вы не можете указать путь для второго параметра DownloadFile (вы можете указать только имя файла). Поэтому, если вышеперечисленное не работает для вас, попробуйте: `(new-object System.Net.WebClient) .DownloadFile ('http://www.example.net/file.‌ txt', 'file.tx‌ t' ) ` n00b 6 лет назад 2
Wget встроен в powershell, бесполезен. Pedro Lobito 5 лет назад 1
// К моему удивлению, wget встроен в PowerShell. Но я уверен, что он работает не так, как в Linux. Nathan Basanese 5 лет назад 0
`wget` в PowerShell - это псевдоним` Invoke-WebRequest`. Попробуйте запустить `Get-Alias ​​wget` ... Paolo Tedesco 5 лет назад 0
163
Tony

Wget для Windows должен работать.

Из Wget Wiki FAQ :

GNU Wget - это бесплатная сетевая утилита для извлечения файлов из World Wide Web с использованием HTTP и FTP, двух наиболее широко используемых интернет-протоколов. Он работает не в интерактивном режиме, что позволяет работать в фоновом режиме после выхода из системы.

Из этого раздела FAQ предлагаются ссылки для скачивания:

Windows Binaries

Вместо этого используется ссылка с любезности Йерней Симончич.

Есть также Winwget http://www.cybershade.us/winwget/, если вы предпочитаете графический интерфейс Col 14 лет назад 8
Автономная версия доступна для загрузки по [этой ссылке] (http://users.ugent.be/~bpuype/wget/). Vito Gentile 10 лет назад 12
Более поздние, даже самые современные (на сегодняшний день) [сборки Windows] (https://eternallybored.org/misc/wget/), предоставленные Jernej Simončič Gras Double 9 лет назад 4
@VitoShadow неработающая ссылка The Red Pea 8 лет назад 0
Извините, [больше не может доверять загрузкам с помощью исходного мошенничества] (http://www.infoworld.com/article/2929732/open-source-software/sourceforge-commits-reputational-suicide.html) cixelsyd 8 лет назад 0
@cixelsyd Обновлена ​​ссылка на альтернативный источник. clearkimura 8 лет назад 1
https://web.archive.org/web/20150115044318/http://users.ugent.be/~bpuype/wget rahuldottech 8 лет назад 0
`wget https://unsecure-cert-site.com/page.html --no-check-certificate -O outputfile.html`, чтобы обойти проблемы https. kayleeFrye_onDeck 7 лет назад 0
Не нужно ничего скачивать. См. Https://superuser.com/questions/25538/how-to-download-files-from-command-line-in-windows-like-wget-is-doing/494009#494009 ниже для получения инструкций о том, как это сделать. работать в родном PowerShell. SDsolar 6 лет назад 0
eternallybored.org/misc/wget/ помечен антивирусом предприятия в моей системе. Технический углерод / Бит 9. Вероятно, ложноположительный. Но sourceforge один работает. Не поддерживает sslv3. TamusJRoyce 6 лет назад 1
65
Steven Penny

Если у вас PowerShell> = 3.0, вы можете использовать Invoke-WebRequest

Invoke-WebRequest -OutFile index.html http://superuser.com 

Или в гольф

iwr -outf index.html http://superuser.com 

Скачать файл через HTTP в Windows

Это не работает с перенаправлениями на sourceforge (и, возможно, на других сайтах), в отличие от `System.Net.WebClient`. Однако вы можете заставить `Invoke-WebRequest` работать, добавив` -UserAgent [Microsoft.PowerShell.Commands.PSUserAgent] :: FireFox`. Ela782 8 лет назад 0
Есть ли возможность увидеть ход загрузки? Franklin Yu 6 лет назад 0
@FranklinYu прогресс покажет, если файл достаточно большой Steven Penny 6 лет назад 0
42
npocmaka

Windows имеет собственную утилиту загрузки из командной строки - BITSAdmin :

BITSAdmin - это инструмент командной строки, который вы можете использовать для создания заданий загрузки или выгрузки и отслеживания их выполнения.

РЕДАКТИРОВАТЬ : 26.01.15 - Вот мой обзор того, как файл может быть загружен в Windows без внешних инструментов

И полный пример битсадмина:

bitsadmin /transfer myDownloadJob /download /priority normal http://downloadsrv/10mb.zip c:\10mb.zip 

Редактировать : 15.05.2018 - оказалось, что можно скачать файл и с certutil :

certutil.exe -urlcache -split -f "https://download.sysinternals.com/files/PSTools.zip" pstools.zip 

Certutil не устанавливается по умолчанию в XP / Win2003, но доступен в более новых версиях Windows. Для XP / 2003 вам понадобится Admin Tool Pack для Windows Server 2003

Интересно. Это одна неуклюжая часть программного обеспечения по сравнению с Wget. Matt H 12 лет назад 7
Обратите внимание, что он не поставляется с Windows XP и, возможно, не с другими версиями. Ian Dunn 11 лет назад 2
Обновление: BITSAdmin устарела и не гарантируется, что будет доступна в будущих версиях Windows. Инструменты администрирования для службы BITS теперь предоставляются командлетами BITS PowerShell. nulldev07 11 лет назад 12
@MattH: потому что это не должно быть Wget в первую очередь? - см. http://en.wikipedia.org/wiki/Background_Intelligent_Transfer_Service peterchen 10 лет назад 1
Невозможно добавить файл - 0x80070057 Tomáš Zato 7 лет назад 4
Спасибо за предоставление нативного решения. Очевидно, что wget "как" wget ... p_q 5 лет назад 0
Я думаю, что вы не можете использовать относительные пути, fx "foo.zip", вы должны использовать абсолютные пути, такие как "C: \ Users \ jdoe \ foo.zip". В противном случае вы получите «Невозможно добавить файл - 0x80070057 - Неверный параметр». Mads Skjern 5 лет назад 0
@MadsSkjern - да, с битсадмином вы не можете использовать относительные пути. Один из обходных путей - добавить `% cd%` к целевому местоположению, если вы хотите быть относительно текущего местоположения. npocmaka 5 лет назад 0
28
user190042

Save the following text as wget.js and simply call

cscript /nologo wget.js http://example.com 

This is the code:

var WinHttpReq = new ActiveXObject("WinHttp.WinHttpRequest.5.1"); WinHttpReq.Open("GET", WScript.Arguments(0), /*async=*/false); WinHttpReq.Send(); WScript.Echo(WinHttpReq.ResponseText); /* To save a binary file use this code instead of previous line BinStream = new ActiveXObject("ADODB.Stream"); BinStream.Type = 1; BinStream.Open(); BinStream.Write(WinHttpReq.ResponseBody); BinStream.SaveToFile("out.bin"); */ 
На каком языке написан этот скрипт? Выглядит полезным для моей текущей задачи. Я хотел бы найти больше справочной документации. Не очень похоже на vb G-. 9 лет назад 0
Полезно для отдельных файлов. Нуждается в улучшении для рекурсивной загрузки и https. opticyclic 9 лет назад 1
@Г-. Я опаздываю на вечеринку, но это JavaScript. prooffreader 8 лет назад 4
Я пытался сделать это для http://database.clamav.net/daily.cvd, но он загрузил только 88 КБ из 44 МБ :( kokbira 6 лет назад 0
17
MartinC

Я сделал быстрый файл myGet.bat, который вызывает метод PowerShell, описанный выше.

@Echo OFF SetLocal EnableDelayedExpansion Set Var=%1 Set Var=!Var:http://=! Set Var=!Var:/=,! Set Var=!Var:%%20=?! Set Var=!Var: =?! Call :LOOP !var! Echo.Downloading: %1 to %~p0!FN! powershell.exe -Command (new-object System.Net.WebClient).DownloadFile('%1','%~p0!FN!') GoTo :EOF :LOOP If "%1"=="" GoTo :EOF Set FN=%1 Set FN=!FN:?= ! Shift GoTo :LOOP 

Я позаимствовал некоторый код из парсинга URL для имени файла с пробелом .

почему отрицание? это выглядит хорошо для меня и является прямым ответом на вопрос. Да, это неуклюжий и может использовать улучшения, такие как экранирование амперсандов (&) в URL, но это работает как есть. matt wilkie 10 лет назад 1
15
Gaurav Kumar

Существует родной Curl для Windows, доступной здесь . Доступно много вариантов - с поддержкой SSL и без нее.

Вам не нужен дополнительный багаж Cygwin и тому подобное, только один маленький EXE-файл.


Также важно знать, что есть wgetи curlпсевдонимы, и встроенные во все современные версии Windows Powershell. Они эквивалентны.

Никаких дополнительных файлов или загрузок не требуется для получения wgetфункциональности:

Использование Curl In Powershell (общительный гик)

Выдержка:

Вы можете ввести команду cURL, например, которая загружает файл из репозитория GitHub.

локон http://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/mongodb-on-ubuntu/azuredeploy.json

и будет казаться, что это работает, но на самом деле он просто использует cURL в качестве псевдонима. В приведенном выше примере вы получите заголовки вместо самого файла.

Псевдонимы в PowerShell позволяют создавать ярлыки для более длинных команд, поэтому вам не нужно вводить их все время.

Если вы введете команду Get-Alias, она выдаст вам список всех псевдонимов, которые используются в PowerShell. Как видите, команда curl просто вызывает команду Invoke-WebRequest. Они похожи, но не одинаковы, поэтому вышеупомянутый запрос не работает для нас.

enter image description here

Чтобы заставить это работать должным образом в PowerShell, проще всего использовать переменные и -OutFileаргумент, как показано здесь:

enter image description here

(имя файла обрезано на изображении « https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/mongodb-on-ubuntu/azuredeploy.json »)

Этот синтаксис загружает все содержимое целевого файла azuredeploy.jsonв локальный файлnewfile.json


Основное преимущество заключается в том, что он встроен в сам Powershell, поэтому этот код будет выполняться напрямую без загрузок или каких-либо других дополнительных созданий файлов, необходимых для его работы в любой современной версии Windows.

Это можно сделать непосредственно в одной строке, но строка становится довольно длинной и не так быстро читается с первого взгляда. SDsolar 6 лет назад 0
8
Jesse P Francis

Я искал то же самое, и, поскольку у меня не было привилегий для установки какого-либо из вышеперечисленных пакетов, я пошел на небольшой обходной путь (для загрузки более 30 файлов):

  • Я создал командный файл
  • Перечислены все файлы
  • Ставить firefox.exeв начале каждой строки
  • Пошел в каталог Firefox в Program Files
  • Запустил это.
3
Zsolt Botykai

И http://www.httrack.com/ имеет приятный графический интерфейс (и он бесплатный) для зеркалирования сайтов. Он также имеет версию для Linux.

3
Rich Homolka

У Cygwin есть Wget (и многие другие утилиты).