Чи можна завантажити за допомогою командного рядка 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, можливо навіть вбудований (гарна зміна інструментів там, напевно!) ... Або європейські версії без 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 

1
Цікаво, чи покладається це на Internet Explorer, але, мабуть, це було б чудовою відповіддю для "Якщо єдиний браузер у Windows мертвий, як підключитися до Інтернету?" на superuser.com/questions/50427/… :-)
Ар’ян

це якщо дозвіл на cscript.exe дозволено
hello_there_andy

Я можу підтвердити, що я протестував цей скрипт у Windows PE 5.1 і він спрацював як шарм. Я маю намір використовувати його для розгортання в режимі офлайн, щоб перевірити версію платформи на USB-накопичувачі на предмет текстового файлу, що зберігається на сервері.
Wayfarer

74

Починаючи з Windows 7, я вважаю, що існує один єдиний метод, про який ще не було сказано, що це просто:

Синтаксис:

bitsadmin / передачі job_name        / завантаження / пріоритет пріоритет    URL   локального \ шлях \ файл

Приклад:

bitsadmin / передача mydownloadjob / завантаження / пріоритет нормальний ^
                  http://example.com/filename.zip C: \ Users \ username \ Завантаження \ 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.


16
це частина windows7.
акіра

3
не працював на моєму Windows 7 ...
jyz

3
Це повинна була відповісти на перше місце. Однак, bitsadmin застарілий на користь оболонки повноважень Windows.
ленкіт

3
Підтвердьте роботу над Win7
кайзер

7
Примітка: BITSAdmin застарілий і не гарантується, що він буде доступний у майбутніх версіях Windows. Адміністративні інструменти для служби BITS тепер надаються командлетами BITS PowerShell.
Ujjwal Singh

39

У Windows 7 входить PowerShell, і з PowerShell ви майже нічого не можете зробити.

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


16
(New-Object Net.WebClient) .DownloadFile ('someurl', 'somepath')
Jason Stangroome

3
Powershell призначений для Powerrangers ! Наскільки це кул і чому, чорт, не знав про це? До побачення cmd.
кайзер

16
з cmd.exe: powershell -command "& { iwr http://www.it1.net/it1_logo2.jpg -OutFile logo.jpg }". також працює з підказки про запуск
Janus Troelsen

1
Так, нічого не можна обійтися без оболонки. Це справжній тюрпіт :)
jcarpenter2

@JanusTroelsen моя версія PowerShell відповіла "Термін" iwr "не впізнається як ім'я cmdlet, ...", але після деякого розслідування подібне спрацювало:powershell -command "$clnt = new-object System.Net.WebClient; $clnt.DownloadFile(\"https://host/name\", \"outpufilename\")"
rogerdpack

25

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

powershell -command "& { (New-Object Net.WebClient).DownloadFile('http://example.com/', 'c:\somefile') }"

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

Який би файл не був, вам потрібно вказати, що він не потребує підтвердження достроково. Ось і ось воно завантажує автоматично. Так так, це технічно можливо, але добрий владика робить це по-іншому.


Я знаю, що wget - це набагато кращий спосіб, це лише гіпотетичне запитання;) Ваша відповідь наближається до кінця, але все ж потрібне втручання користувача (натискання кнопки "Зберегти" або налаштовуючи не відображати це діалогове вікно)
Роберт Масса

3
Як я вже говорив, вам потрібно скасувати вибір для запиту на збереження для цього типу файлів. Наприклад, завантажте zip-файл, відключіть цей рядок, і в подальшому всі поштові файли, доступ до яких здійснюється з командного рядка, автоматично зберігаються.
DHayes

1
+1, хоча я не підтвердив це, він працює (але остаточне твердження дуже правдиве)
Ар'ян

1
+1 за "шановний пане, не роби це так" ... :)
шарлатанний кіхот

12

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

Ви отримуєте класичну підказку Завантажити файл . Якщо файл не є типом, який Windows Explorer знає, як відображати inline, (.html, .jpg, .gif), у цьому випадку вам потрібно буде клацнути правою кнопкою миші, щоб зберегти його.

Я щойно перевірив це на моєму зображенні VMware встановленої незайманої програми Windows XP 2002 SP1, і це працює чудово.


4
для цього потрібна взаємодія з користувачем. Мабуть, не те, що хоче більшість людей, які хочуть завантажити файл із командного рядка
Kip

Сьогодні це залежить від вашого браузера за замовчуванням. Шахта є хромованою, і вона автоматично завантажується у відоме місце, тому я вважаю це рішення достатнім для моїх потреб. Дякую!
kayleeFrye_onDeck


6

Використовуйте FTP.

З командного рядка:

ftp ftp.somesite.com
user
password

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

@RM: Це буде грубо, якщо ви не хочете завантажувати будь-які інші інструменти. Існує командний рядок Wget для Windows, а Wget призначений для того, щоб робити саме те, що вам потрібно.


+1 хороша відповідь. ftp є досить універсальним, доки сервер, який ви намагаєтеся завантажити з нього, підтримує.
DaveParillo

Дякую, вибачте, що я не був більш конкретним, я мав на увазі використання HTTP.
Роберт Масса

1
Це не працюватиме з більшістю FTP-серверів, оскільки пасивний режим не підтримується цим ftp-клієнтом Windows (з NATs між пасивним режимом не потрібно).
Пітер Мортенсен

@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"
    

Це працює навіть у 64-розрядному Windows XP, PowerShell 2.0.
Пітер Мортенсен

1

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

Ви також можете встановити Cygwin , а також використовувати wget, щоб завантажити файл. Це дуже простий спосіб завантаження файлів з командного рядка.


2
Я впевнений, що "cygwin" вважається нестандартною утилітою ;-)
DaveParillo

Telnet - це цікавий варіант, чи є спосіб передавати вихід у файл, не пошкоджуючи його? І чи можемо ми передати HTTP GET команду в telnet, щоб зробити запит?
Роберт Масса

Встановити 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')"
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.