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

348

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

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

Peter Mortensen
источник
Просто щелкните правой кнопкой мыши файл и нажмите «Сохранить объект как», «Сохранить ссылку как» или «Сохранить как» (язык зависит от вашего браузера).
BrainSlugs83
25
Смысл наличия команды - это возможность написать командный файл и запустить его (возможно, запланированный как задача) в любое время, когда вы захотите. Вот где графический интерфейс терпит неудачу.
Jbm
4
Как вы загружаете с MS Word?
Хайме Хаблутцель
5
@JaimeHablutzel Почему вы хотите скачать что-нибудь через MS Word? MS Word не является терминалом.
Брэден Бест
1
@SDsolar Или просто добавьте / улучшите ответ ниже.
Франклин Ю

Ответы:

180

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

Из Wget Wiki FAQ :

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

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

Windows Binaries

Ссылка с любезности Jernej Simončič используется вместо этого.

clearkimura
источник
9
Есть также Winwget cybershade.us/winwget, если вы предпочитаете графический интерфейс
Col
13
Автономная версия доступна для скачивания по этой ссылке .
Вито Джентиле
5
Более поздние, даже самые современные (на сегодняшний день) сборки Windows , предоставленные Jernej Simončič
Gras Double
1
@cixelsyd Обновлена ​​ссылка на альтернативный источник.
Clearkimura
1
eternallybored.org/misc/wget/ помечен антивирусом предприятия в моей системе. Углеродная сажа / Бит 9. Вероятно, ложноположительный. Но Sourceforge один работает. Не поддерживает sslv3.
TamusJRoyce
311

Альтернатива, которую я недавно обнаружил, используя 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.

Ubeogesh
источник
91
Вы также можете сделать это в одну строку:(new-object System.Net.WebClient).DownloadFile('http://www.xyz.net/file.txt','C:\tmp\file.txt')
schellack
16
@Rob PowerShell встроен в Windows ...
nhinkle
9
От Vista, да.
Арран
3
@ BrainSlugs83, конечно, но многие люди все еще используют XP. Это просто что-то иметь в виду.
Арран
4
@ BrainSlugs83, вы недооцениваете количество людей, все еще работающих в старых системах Windows. Я не понимаю проблему, я указал, что это только на Vista и выше. Люди могут игнорировать это или сказать «эй, спасибо!», Но вы…? Если у вас есть проблемы, создайте чат, и мы можем поговорить. Кто-то с репутацией (как и вы) должен понимать, что здесь не место для этой дискуссии.
Арран
83

Если у вас 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
Есть ли возможность увидеть ход загрузки?
Франклин Ю
@FranklinYu прогресс покажет, если файл достаточно большой
Стивен Пенни
Есть ли возможность не указывать выходной файл, но все же сохранять (как wgetили curl -O, curl --remote-nameили curl -J?)
Томаш Гандор
60

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

npocmaka
источник
7
Интересно. Это одна неуклюжая часть программного обеспечения по сравнению с Wget.
Мэтт Х
2
Обратите внимание, что он не поставляется с Windows XP и, возможно, не с другими версиями.
Ян Данн
12
Обновление: BITSAdmin устарела и не гарантируется, что будет доступна в будущих версиях Windows. Средства администрирования для службы BITS теперь предоставляются командлетами BITS PowerShell.
nulldev07
2
@MattH: потому что это не должно быть Wget в первую очередь? - см. en.wikipedia.org/wiki/Background_Intelligent_Transfer_Service
peterchen
4
Невозможно добавить файл - 0x80070057
Томаш Зато
32

Сохраните следующий текст как wget.jsи просто позвоните

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

Это код:

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");
*/
user190042
источник
На каком языке написан этот скрипт? Выглядит полезным для моей текущей задачи. Я хотел бы найти больше справочной документации. Не очень похоже на VB
G-.
1
Полезно для отдельных файлов. Нуждается в улучшении для рекурсивной загрузки и https.
Оптически,
4
@ГРАММ-. Я опаздываю на вечеринку, но это JavaScript.
prooffreader
Я пытался сделать это для database.clamav.net/daily.cvd , но он загрузил только 88 КБ из 44 МБ :(
kokbira
22

Существует родной 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. Они похожи, но не одинаковы, поэтому вышеупомянутый запрос не работает для нас.

введите описание изображения здесь

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

введите описание изображения здесь

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

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


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

SDsolar
источник
Это можно сделать непосредственно в одной строке, но строка становится довольно длинной и не так быстро читается с первого взгляда.
SDsolar
21

Я сделал быстрый файл 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 для имени файла с пробелом .

MartinC
источник
1
почему отрицание? это выглядит хорошо для меня и является прямым ответом на вопрос. Да, это неуклюжий и может использовать улучшения, такие как экранирование амперсандов (&) в URL, но это работает как есть.
Мэтт Уилки
Не проще ли написать скрипт PowerShell ???
SamB
1
powershell.exe -Command "Invoke-WebRequest -OutFile ./file-name https://location/file-name"<- Простое использование PowerShell в одной строке в точном месте кодирования файла сценария и имени файла.
Джеймс Эби
8

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

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

Если PowerShell является опцией, это предпочтительный маршрут, поскольку вам (потенциально) не придется устанавливать ничего лишнего:

(new-object System.Net.WebClient).DownloadFile('http://www.xyz.net/file.txt', 'C:\tmp\file.tx??t')

В противном случае Wget для Windows, как уже отмечали другие, определенно является вторым лучшим вариантом. Как написано в другом ответе, похоже, что вы можете загрузить Wget самостоятельно или взять его как часть Cygwin или MSys .

Если по какой-то причине вы застряли во временной деформации, используя компьютер без PowerShell, и у вас нулевой доступ к работающему веб-браузеру (то есть Internet Explorer - единственный браузер в системе и его настройки повреждены), и ваш файл находится на FTP-сайте (в отличие от HTTP):

start->run "FTP", press "OK".

Если память используется, она существует со времен Windows 98, и я могу подтвердить, что она все еще есть в Windows 8 RTM (возможно, вам придется войти appwiz.cplи добавить / удалить функции, чтобы получить ее). Эта утилита может загружать и загружать файлы на / с FTP-сайтов в Интернете. Он также может быть использован в сценариях для автоматизации любой операции.

Этот встроенный инструмент был для меня реальным спасением жизни в прошлом, особенно во времена ftp.cdrom.com - я однажды скачал Firefox таким образом, на полностью сломанной машине, на которой был только коммутируемый Интернет. подключение (назад, когда максимальный размер пакета sneakernet был все еще 1.44 МБ, и Firefox все еще назывался "Netscape" / me делает trollface ).

Пара советов: это собственный командный процессор и собственный синтаксис. Попробуйте ввести «помощь». Все FTP-сайты требуют имя пользователя и пароль; но если они разрешают «анонимных» пользователей, имя пользователя «анонимный», а пароль - ваш адрес электронной почты (вы можете создать его, если не хотите, чтобы его отслеживали, но обычно есть какая-то логика, чтобы убедиться, что это действительный адрес электронной почты).

BrainSlugs83
источник
+1 за размышления о командной строке ftp! Однако wget и powershell были упомянуты задолго до того, как вы присоединились к группе, так что -1 здесь. : - /
Мэтт Уилки
Все остальные ответы на PowerShell, которые я видел, были многоуровневыми и / или имели какой-то запах кода - это короткий и простой вкладыш для загрузки файла. - Также я хотел дать ответ, который охватывал все основы. :-)
BrainSlugs83
1
Я не уверен, почему у вас есть два знака вопроса в файле назначенияC:\tmp\file.tx??t
Ploni
2

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

Zsolt Botykai
источник
2

Вы также можете использовать wgetпакет в PowerShell . ; ^) Чтобы открыть, нажмите клавишу Windows и введите «powershell» или Windows-R, введите «powershell» и нажмите return.

Нет необходимости установки.

Одно интересное отличие от обычного wget(подробнее по этой ссылке ): вы не можете просто использовать большее, чем для передачи в файл. wgetв PowerShell это просто удобная оболочка Invoke-WebRequest, и вам нужно использовать ее синтаксис для записи в файл.

wget https://superuser.com/questions/25538 -OutFile rubySlippers.html
руфин
источник
1
-OutFileсделал работу!
Димитрий К
1

Вы можете получить WGet для Windows здесь . В качестве альтернативы вы можете щелкнуть правой кнопкой мыши ссылку для загрузки элемента, который хотите загрузить, и выбрать «Сохранить как». Это загрузит файл, а не откроет его в назначенном приложении.

BinaryMisfit
источник
1

Я думаю, что установка wgetчерез Chocolatey - самый простой способ.

  1. Установить шоколад
  2. В командной строке введите: choco install wget
  3. Затем вы можете использовать wgetиз командной строки, как в * nix системах.
sivabudh
источник
1

Поиск /downloadфункции на https://lolbas-project.github.io .

Прямо сейчас есть Bitsadmin.exe, Certutil.exe, Esentutl.exe, Expand.exe, Extrac32.exe, Findstr.exe, Hh.exe, Ieexec.exe, Makecab.exe, Replace.exeдля Windows Vista, Windows 7, Windows 8, Windows 8.1, Windows 10 и эквивалентные версии сервера.

noraj
источник
0

Если вам нужен графический интерфейс, попробуйте VisualWget , который на самом деле чистый и с полным набором функций. Он основан на GNU Wget для его движка загрузки.

РЕДАКТИРОВАТЬ: обновленная ссылка.

Вурлитцер
источник
1
вот обновленная ссылка: sites.google.com/site/visualwget/… (файлы для скачивания находятся внизу страницы, используйте маленькие стрелки справа)
Reed Hedges
0

Как описано в этом ответе SU , вы можете использовать следующее в Powershell:

Import-Module bitstransfer
start-bitstransfer -source http://something/something.ext -destination c:\something.ext
Долан Антенуччи
источник
-1

Альтернативой использованию gnuwin32 является unxutils, который включает в себя wget.

Крис Чилверс
источник
вы можете работать с unxutils, но он старый, он использует старую версию wget. Gnuwin32 - это то, что нужно использовать. не так удобно устанавливать и не так просто находить вещи, но он имеет гораздо больше, чем unxutils.
Барлоп
-3

Если вам нужен визуальный пост для Windows, вот один.
Вы можете разместить данные или файлы с ним.

WeGoToMars
источник