Можно ли скачать с помощью командной строки Windows?

123

Можно ли скачивать с помощью командной строки Windows без использования каких-либо нестандартных (включая Windows) утилит?

Предпочтительной версией является Windows XP, но также интересно узнать о новых версиях.

Чтобы уточнить мой вопрос:

  • Это должно быть использование HTTP
  • Файл должен быть сохранен
  • Стандартная чистая установка Windows, никаких дополнительных инструментов

В общем, так как все кричат ​​о Wget , я хочу простую функциональность Wget без использования Wget.

Роберт Масса
источник
6
Больше идей в "Если единственный браузер в Windows мертв, как подключиться к Интернету?" на superuser.com/questions/50427/…
Арджан
И что из дюжины версий Windows XP это будет?
Арджан
Допустим, это может быть любая версия Windows XP SP2 и все, что будет выпущено позже.
Роберт Масса
@arjan Интересный вопрос, но однозначного ответа пока нет.
Роберт Масса
Я должен был попросить «издание». Как Starter, Home, Professional, Media Center, Tablet, может быть, даже Embedded (я думаю, это хорошая замена для инструментов!) ... Или европейские версии без Windows Media Player. :-)
Арджан

Ответы:

51

Вы можете написать VBScript и запустить его из командной строки

Создайте файл downloadfile.vbsи вставьте следующие строки кода:

' Set your settings
    strFileURL = "http://www.it1.net/images/it1_logo2.jpg"
    strHDLocation = "c:\logo.jpg"

' Fetch the file
    Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP")

    objXMLHTTP.open "GET", strFileURL, false
    objXMLHTTP.send()

If objXMLHTTP.Status = 200 Then
Set objADOStream = CreateObject("ADODB.Stream")
objADOStream.Open
objADOStream.Type = 1 'adTypeBinary

objADOStream.Write objXMLHTTP.ResponseBody
objADOStream.Position = 0    'Set the stream position to the start

Set objFSO = CreateObject("Scripting.FileSystemObject")
If objFSO.Fileexists(strHDLocation) Then objFSO.DeleteFile strHDLocation
Set objFSO = Nothing

objADOStream.SaveToFile strHDLocation
objADOStream.Close
Set objADOStream = Nothing
End if

Set objXMLHTTP = Nothing

Запустите его из командной строки следующим образом:

cscript.exe downloadfile.vbs 
phuclv
источник
1
Интересно, если это зависит от Internet Explorer, но я думаю, что это будет хороший ответ для "Если единственный браузер в Windows мертв, как подключиться к Интернету?" на superuser.com/questions/50427/… :-)
Арджан
это если разрешение на cscript.exe разрешено
hello_there_andy
Я могу подтвердить, что я тестировал этот сценарий в Windows PE 5.1, и он работал как шарм. Я намерен использовать его для автономного развертывания, чтобы сравнить версию платформы на USB-накопителе с текстовым файлом, хранящимся на сервере.
путник
74

Начиная с Windows 7, я считаю, что есть один единственный метод, который еще не был упомянут, это простой:

Синтаксис:

bitadmin / передать имя- задания        / загрузить / приоритетный    URL-адрес   локальный \ путь \ файл

Пример:

bitadmin / передача mydownloadjob / загрузка / приоритет нормальный ^
                  http://example.com/filename.zip C: \ Users \ username \ Downloads \ filename.zip

(Разбит на две отдельные строки ^для удобства чтения (чтобы избежать прокрутки).)

Предупреждение. Как указано в комментариях, bitsadminсправочное сообщение начинается со слов:

BITSAdmin is deprecated and is not guaranteed to be available in future versions of Windows.
Administrative tools for the BITS service are now provided by BITS PowerShell cmdlets.

... но другой комментарий сообщил, что он работает на Windows 8.

TimeShift
источник
16
это часть windows7.
Акира
3
не работал на моих окнах 7 ...
JYZ
3
Это должен был быть ответ с наибольшим количеством голосов. Битсадмин не рекомендуется в пользу Windows PowerShell.
Lenkite
3
Подтвердите работу над Win7
kaiser
7
Примечание. BITSAdmin устарела и не гарантируется, что будет доступна в будущих версиях Windows. Средства администрирования для службы BITS теперь предоставляются командлетами BITS PowerShell.
Уджвал Сингх
39

Windows 7 включает PowerShell, и с PowerShell практически ничего нельзя сделать.

Родная альтернатива wget в Windows PowerShell?

user15130
источник
16
(New-Object Net.WebClient) .DownloadFile ('someurl', 'somepath')
Джейсон Стенгром
3
Powershell для Powerrangers ! Насколько это круто и какого чёрта я не знал об этом? Byebye cmd.
Кайзер
17
из cmd.exe: powershell -command "& { iwr http://www.it1.net/it1_logo2.jpg -OutFile logo.jpg }". также работает из командной строки
Янус Троелсен
1
Да, ты ничего не можешь сделать без PowerShell. Это настоящий тюрпинг по тюрингу :)
jcarpenter2
@JanusTroelsen моя версия PowerShell ответила: «Термин« iwr »не распознается как имя командлета, ...», но после некоторого расследования этот powershell -command "$clnt = new-object System.Net.WebClient; $clnt.DownloadFile(\"https://host/name\", \"outpufilename\")"
метод
25

PowerShell (входит в состав Windows 8 и входит в состав .NET для более ранних выпусков) имеет такую ​​возможность. Команда powershellпозволяет запускать произвольные команды PowerShell из командной строки или .batфайла. Таким образом, следующая строка - это то, что нужно:

powershell -command "& { (New-Object Net.WebClient).DownloadFile('http://example.com/', 'c:\somefile') }"
Nik
источник
2
Это не дает ответа на вопрос. Чтобы критиковать или запрашивать разъяснения у автора, оставьте комментарий под его постом - вы всегда можете комментировать свои собственные посты, и, когда у вас будет достаточно репутации, вы сможете комментировать любые посты .
harrymc
3
@harrymc уверен, что это ответ. он загружает файл. что еще ты хочешь?
Янус Троелсен
1
(1) Некоторый текст, объясняющий, что означает этот однострочный, (2) Убедитесь, что ваш ответ не является альтернативой формулировке предыдущего ответа, поскольку, если это так, он должен быть максимально выражен как комментарий к этому ответу.
harrymc
Какая версия Windows и PowerShell требуется для этого?
Питер Мортенсен
2
это не работает в Windows Server 2012 FYI, оно вызывает
исключение MethodInvocationException
17

Я нашел способ сделать это, но на самом деле просто установите Wget .

Вы можете использовать Internet Explorer из командной строки (iexplore.exe), а затем ввести URL-адрес в качестве аргумента. Итак, запустите:

iexplore.exe http://blah.com/filename.zip

Какой бы файл ни был, вам нужно указать, что он не требует подтверждения заранее. И вот, он автоматически выполнит загрузку. Так что да, это технически возможно, но добрый господин делает это по-другому.

DHayes
источник
Я знаю, что wget - намного лучший способ, это всего лишь гипотетический вопрос;) Ваш ответ очень близок, но все же требует вмешательства пользователя (нажмите «Сохранить» или настройку, чтобы не отображать это диалоговое окно)
Роберт Масса,
3
Как я уже сказал, вы должны отменить выбор, чтобы предложить сохранить для этого типа файла. Например, загрузите zip-файл, отключите эту подсказку, а затем в будущем все zip-файлы, доступ к которым получен из командной строки, будут автоматически сохранены.
DHayes
1
+1, хотя я не проверял, что это работает (но последнее утверждение очень верно)
Арджан
1
+1 за "дорогой лорд, не делай так" ... :)
кваш-кряк
12

Windows Explorer (не путать с Internet Explorer) может загружать файлы через HTTP. Просто введите URL в адресную строку. Или из командной строки, например C:\windows\explorer.exe http://somewhere.com/filename.ext,.

Вы получаете классическую подсказку для загрузки файла . Если файл не является типом, который Windows Explorer знает, как отображать встроенный файл (.html, .jpg, .gif), в этом случае вам потребуется щелкнуть правой кнопкой мыши, чтобы сохранить его.

Я только что проверил это на своем образе VMware девственной установки Windows XP 2002 SP1, и он работает отлично.

Крис Но
источник
4
это требует взаимодействия с пользователем. вероятно, не то, что хочет большинство людей, которые хотят загрузить файл из командной строки
Kip
В настоящее время это зависит от вашего браузера по умолчанию. У меня хром, и он автоматически загружает в известное место, поэтому я считаю, что это решение будет достаточно для моих нужд. Спасибо!
kayleeFrye_onDeck
7

Вы можете использовать (в стандартной Windows Bat):

powershell -command "& { iwr http://www.it1.net/it1_logo2.jpg -OutFile logo.jpg }"

Кажется, требуется PowerShell v4 ...

(Благодаря этому комментарию и этому )

Энтони О.
источник
6

Используйте FTP.

Из командной строки:

ftp ftp.somesite.com
user
password

и т.д. FTP включен в каждую версию Windows, которую я помню; вероятно не в 3.1, возможно не в Windows 95 , но, конечно, все после этого.

@RM: Это будет грубо, если вы не хотите загружать какие-либо другие инструменты. Существует командная строка Wget для Windows, и Wget разработан именно для того, что вы просите.

Satanicpuppy
источник
+1 хороший ответ. ftp довольно универсален, поскольку сервер, который вы пытаетесь загрузить с, поддерживает его.
DaveParillo
Спасибо, извините, я не уточнил, я имел в виду использование HTTP.
Роберт Масса
1
Это не будет работать с большинством FTP-серверов, так как этот ftp-клиент Windows не поддерживает пассивный режим (с NAT требуется промежуточный пассивный режим).
Питер Мортенсен
@PeterMortensen Он также не дает удаленного ответа на вопрос, так как он отредактировал его, чтобы указать, что он ищет функциональность wget. Но не позволяйте этому помешать вам воскресить 7-летний неправильный ответ, просто чтобы добавить педантизм.
Satanicpuppy
4

Используйте PowerShell следующим образом:

  1. Создайте файл download.ps1:

    param($url, $filename)
    $client = new-object System.Net.WebClient 
    $client.DownloadFile( $url, $filename)
    
  2. Теперь вы можете скачать файл так:

    powershell Set-ExecutionPolicy Unrestricted
    powershell -ExecutionPolicy RemoteSigned -File "download.ps1" "http://somewhere.com/filename.ext" "d:\filename.ext"
    
Томас Йесперсен
источник
Это работает даже в Windows XP 64-bit, PowerShell 2.0.
Питер Мортенсен
1

Если вы устанавливаете Telnet, я думаю, вы могли бы сделать HTTP-запрос к серверу для загрузки файла.

Вы также можете установить Cygwin и использовать wget для загрузки файла. Это очень простой способ загрузки файлов из командной строки.

EvilChookie
источник
2
Я почти уверен, что «cygwin» считается нестандартной утилитой ;-)
DaveParillo
Telnet - интересный вариант, есть ли способ передать вывод в файл, не повреждая его? И можем ли мы направить команду HTTP GET в telnet для выполнения запроса?
Роберт Масса
Установить телнет? Telnet похож на ftp; это идет с окнами. Не знаю о перенаправлении вывода, хотя.
Satanicpuppy
Для XP (как в вопросе) telnet установлен по умолчанию, но я слышал, что в Vista это больше не так? Но нет, он не позволяет загружать файлы, если только все не возвращено в одном HTTP-ответе, и можно также убрать заголовки и декодировать содержимое в командной строке. Совершенно маловероятно, что это можно контролировать.
Арджан
1
Зачем устанавливать Cygwin только для использования wget? Доступен собственный двоичный файл win32.
InnaM
1

Есть несколько способов загрузки с помощью командной строки в Windows:

  1. Вы можете использовать Cygwin .

    Примечание: включенные приложения не являются родными приложениями Linux. Вы должны пересобрать свое приложение из исходного кода, если хотите работать в Windows.

  2. Используя telnet, можно сделать запрос, но вы не увидите никакой обработки.

  3. Вы можете написать сценарии bat или VBS.

  4. Напишите свою собственную программу, которую вы можете запустить из cmd.exe.

Иисус
источник
1

Вы можете установить приложение Linux Wget на Windows. Его можно скачать с http://gnuwin32.sourceforge.net/packages/wget.htm . Затем вы можете выполнить команду 'wget (inserturlhere)' или любой другой URL-адрес в командной строке, и он позволит вам загрузить этот URL / файл / изображение.

Питер Мортенсен
источник
1
Странно, эта версия не всегда совместима. На моем компьютере с Windows 7 это было не потому, что библиотеки отсутствовали. Вы бы хотели использовать wget без каких-либо дополнительных библиотек большую часть времени. users.ugent.be/~bpuype/wget
sinni800
0

В Windows по умолчанию вы не можете скачать через HTTP. Windows является GUI-ориентированной ОС, поэтому в ней отсутствуют многие инструменты командной строки, которые вы могли бы найти в других ОС, например wget, которые были бы главным кандидатом.

System.Net.WebClient.DownloadFile(), функция в WiniNetAPI, может загружать файлы, но я не уверен, насколько далеко вы попали в реальную разработку по сравнению с командным файлом.

Эндрю Сканелли
источник
Я понимаю, что это возможно с помощью wget, но мой вопрос гласит без использования нестандартных утилит Windows.
Роберт Масса
0

Если у вас установлен Python, вот пример, который получает get-pip.py из Интернета

python -c "import urllib; urllib.urlretrieve ('https://bootstrap.pypa.io/get-pip.py', r'C:\python27\Tools\get-pip.py')"
Sipherlab
источник