19

Мне нужен способ загрузки файла через HTTP с учетом его URL (аналогично тому, как работает wget). Я видел ответы на этот вопрос, но у меня есть два изменения в требованиях:

  • Я хотел бы, чтобы он работал на Windows 7 или более поздней версии (хотя, если он работает на Windows XP, это бонус).
  • Я должен быть в состоянии сделать это на стандартном компьютере, используя только сценарий, который должен быть текстом, который можно легко ввести с клавиатуры или скопировать / вставить.
  • Чем короче, тем лучше.

Поэтому, по сути, я хотел бы сценарий .cmd (пакетный), сценарий VBScript или PowerShell, который может выполнить загрузку. Он может использовать COM или вызывать Internet Explorer, но он должен работать без какого-либо ввода и должен вести себя хорошо при вызове без отображения (например, через сеанс Telnet ).

5 ответов5

16

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

Invoke-WebRequest -OutFile su.htm -Uri superuser.com

Или игра в гольф:

iwr -outf su.htm superuser.com
14

Я бы использовал БИТЫ (учебник для начинающих):

Background Intelligent Transfer Service (BITS) is a component of modern
Microsoft Windows operating systems that facilitates prioritized,
throttled, and asynchronous transfer of files between machines using
idle network bandwidth.

Начиная с Windows 7, Microsoft рекомендует использовать командлеты PowerShell для BITS.

% import-module bitstransfer
% Start-BitsTransfer http://path/to/file C:\Path\for\local\file

Вы также можете использовать биты через COM, см. Здесь пример VBScript. И есть битсадмин, инструмент командной строки для управления загрузками:

BITSAdmin is a command-line tool that you can use to create download or
upload jobs and monitor their progress.

В Windows 7 bitsadmin.exe заявляет, что это устаревший инструмент. тем не менее:

% bitsadmin.exe /transfer "NAME" http://path/to/file C:\Path\for\local\file
7

Попробуйте класс веб-клиента . Существует пример сценария PowerShell в нижней части этой страницы:

$c = new-object system.net.WebClient
$r = new-object system.io.StreamReader $c.OpenRead("http://superuser.com")
echo $r.ReadToEnd()
3

Скопируйте и вставьте следующие шесть строк (или только последние четыре строки) в текстовый файл. Затем переименуйте его в vget.vbs .

'cscript vget.vbs >FILE.TXT
'Run this vbscript at command line. Use above syntax to download/create FILE.TXT
Set oX = CreateObject("Microsoft.XmlHTTP")
oX.Open "GET", "http://www.exampleURL.com/FILE.TXT", False
oX.Send ""
WScript.Echo oX.responseText

Очевидно, вам нужно настроить три вещи в этом скрипте, чтобы он работал на вас.

  1. Часть, которая говорит " http://www.exampleURL.com/FILE.TXT ". Вам нужно будет заменить правильный URL-адрес файла, который вы хотите загрузить.
  2. Команда, которую вы запустите в командной строке для выполнения этого скрипта; Вам нужно будет указать правильное имя для скрипта, vget.vbs , если вы его так назвали.
  3. И имя FILE.TXT которое вы хотите, чтобы вывод направлялся в командной строке DOS .

Я только попытался использовать это для загрузки необработанного текстового файла ASCII (более мощный сценарий cmd) из моей учетной записи Dropbox , поэтому я не знаю, будет ли он работать для файлов EXE и т. Д .; или с других веб-серверов.

Если вы обойдетесь без первых двух строк комментариев, это будет всего четыре строки. Если вы знаете, как работать с VBScript, вы даже можете носить этот код в своей голове и вводить его в командной строке по мере необходимости. Он содержит только пять ключевых компонентов команды: CreateObject .Send , WScript.Echo и .responseText .

1

Вот моя попытка возобновить способы загрузки файла в Windows без использования внешних инструментов.

Он включает в себя BITSADMIN, Microsoft.XmlHTTP и WinHTTP с гибридным пакетным /JScript- скриптом, который не требует временных файлов, и System.Net.WebClinet с самоскомпилированным гибридом jscript.net.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .