Аналог wget для windows

Обновлено: 03.07.2024

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

В Windows PowerShell есть собственная альтернатива wget ?

Вот простой PS 3.0 и более поздний однострочный, который работает и не требует большого количества PS barf:

Обратите внимание, что:

  • wget это псевдоним для Invoke-WebRequest
  • Invoke-WebRequest возвращает HtmlWebResponseObject , который содержит множество полезных свойств для разбора HTML, таких как ссылки, изображения, формы, поля ввода и т. Д., Но в этом случае мы просто используем необработанный контент
  • Содержимое файла хранится в памяти перед записью на диск, что делает этот подход непригодным для загрузки больших файлов

При установке Windows Server Core вам нужно записать это как

До 20 сентября 2014 года я предложил

как ответ. Однако это работает не во всех случаях, так как > оператор (который является псевдонимом Out-File ) преобразует ввод в Unicode.

Если вы используете Windows 7, вам необходимо установить версию 4 или более новую платформу Windows Management Framework.

Возможно, вы обнаружите, что выполнение команды $ProgressPreference = "silentlyContinue" before Invoke-WebRequest значительно улучшит скорость загрузки больших файлов; эта переменная контролирует, отображается ли пользовательский интерфейс прогресса.

Теперь это правильный ответ, и я случайно наткнулся на wget, проверяя, установлен ли я на самом деле. Раздражает, что он не может легко получить имя файла (вы должны указать его в перенаправлении вывода), но этот параметр имеет лучший интерфейс, чем реальный wget (по моему мнению), так что это так. Но Windows 7 поставляется только с PowerShell 2.0 , и результатом будет «Термин« Invoke-WebRequest »не распознается как имя командлета, . ». Справедливое предупреждение: этот метод помещает все содержимое файла в память перед записью его в файл. Это не очень хорошее решение для загрузки больших файлов. @dezza Я обновил ответ другим подходом. Попробуйте снова.

Если вам просто нужно получить файл, вы можете использовать метод DownloadFile объекта WebClient :

Где $url строка, представляющая URL-адрес файла и $path представляющая локальный путь, в который будет сохранен файл.

Обратите внимание, что $path должно включать имя файла; это не может быть просто каталог.

Да, это работает из коробки на Windows 7 ( который поставляется с PowerShell 2.0 ). Образец: $client.DownloadFile( "http://blog.stackexchange.com/", "c:/temp2/_Download.html")

В Invoke-WebRequest следующей версии PowerShell 3:

@gWaldo, ты шутишь - это радость для использования (говоря как кто-то, кто только учится PS) Я просто имею в виду, что -Outfile параметр кажется посторонним, когда вы можете просто использовать > (перезаписать) или >> (добавить) в файл. @gWaldo или даже вывести имя файла из URL, как это wget делает :) И начиная с PS 4.0, wget и по умолчанию curl псевдоним Invoke-WebRequest ( iwr ): D

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

В качестве альтернативы (и это я бы порекомендовал) вы можете использовать биты:

Он покажет прогресс и загрузит файл в текущий каталог.

BITS полагается на поддержку на стороне сервера, если доступно, это работает в фоновом режиме, и вы можете получать обновления прогресса с другими командлетами. @jsalonen Я думаю, что BITS будет загружать только файлы, а не страницы. Как говорит Ричард, он опирается на некоторую поддержку на стороне сервера (хотя я не думаю, что это специфично для Microsoft). Я вижу и думаю, что понимаю смысл использования BITS, однако здесь дело не в том, что я ищу.

PowerShell V4 One-liner:

Это в основном Уоррен (удивительный) однострочный V3 (спасибо за это!) - с небольшим изменением, чтобы заставить его работать в PowerShell V4.

Однострочник Уоррена - который просто использует, wget а не iwr - должен по-прежнему работать для V3 (по крайней мере, я думаю, хотя и не проверял его). Так или иначе. Но при попытке выполнить его в PowerShell V4 (как я пытался) вы увидите, что PowerShell не удается преобразовать wget в действительный командлет / программу.

Для тех, кто заинтересован, это - как я понял из комментария Боба в ответ на принятый ответ (спасибо, мужик!) - потому что wget curl Invoke-WebRequest iwr начиная с PowerShell V4 и для которого назначены псевдонимы , установлено по умолчанию . Таким образом, wget не может быть решена (а также curl не может работать здесь) .

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

В Windows PowerShell существует ли родная альтернатива wget ?

Вот простой PS 3.0 и более поздний однострочный шрифт, который работает и не требует много PS barf:

Обратите внимание, что:

  • wget является псевдонимом для Invoke-WebRequest
  • Invoke-WebRequest возвращает HtmlWebResponseObject , который содержит много полезных свойств синтаксического анализа HTML, таких как ссылки, изображения, формы, входные поля и т. д., но в этом случае мы просто используем исходный контент
  • Содержимое файла сохраняется в памяти перед записью на диск, что делает этот подход непригодным для загрузки больших файлов.

В установках Windows Server Core вам необходимо написать это как

До 20 сентября 2014 года я предложил

как ответ. Однако это не работает во всех случаях, так как оператор > (который является псевдонимом для Out-File ) преобразует введите в Юникод.

Если вы используете Windows 7, вам необходимо установить версию 4 или новее в Windows Management Framework.

Вы можете обнаружить, что выполнение $ ProgressPreference = "silentlyContinue" до Invoke-WebRequest значительно улучшит скорость загрузки с большими файлами; эта переменная контролирует, будет ли отображаться пользовательский интерфейс выполнения.

Если вам просто нужно получить файл, вы можете использовать DownloadFile метода WebClient :

Где $ url представляет собой строку, представляющую URL-адрес файла, а $ path представляет локальный путь, файл будет сохранен.

Обратите внимание, что $ path должен содержать имя файла; он не может быть просто каталогом.

Существует Invoke-WebRequest в следующей версии PowerShell 3:

В качестве альтернативы (и это я бы рекомендовал) вы можете использовать BITS:

Он покажет ход и загрузит файл в текущий каталог.

PowerShell V4 Однострочный:

Это в основном Уоррен (удивительный) V3 с одним слоем (спасибо за это!) - с небольшим изменением, чтобы заставить его работать в V4 PowerShell.

один лайнер Уоррена - который просто использует wget , а не iwr - должен по-прежнему работать для V3 (по крайней мере, я думаю, не проверял его, хотя). Так или иначе. Но при попытке выполнить его в V4 PowerShell (как я и пытался) PowerShell не сможет разрешить wget как действительный командлет /программу.

Для тех, кого это интересует, то есть, как я взял из комментарий Боба в ответ на принятый ответ (спасибо, человек!) - потому что от PowerShell V4, wget и curl имеют псевдоним Invoke-WebRequest , по умолчанию iwr . Таким образом, wget не может быть разрешен (а также curl не может работать здесь) .

Вот функция PowerShell, которая разрешает короткие URL-адреса перед загрузкой файла

Используйте его так, чтобы загрузить файл в текущую папку:

Или загрузить файл в указанную папку:

Следующая функция получит URL-адрес.

  1. Последние 4 строки нужны только в том случае, если вы находитесь за аутентификационным прокси. Для простого использования (New-Object Net.WebClient) .DownloadFile ($ url, $ path) отлично работает.
  2. Путь должен быть абсолютным, так как загрузка не выполняется в вашем текущем каталоге, поэтому относительные пути приведут к тому, что загрузка будет потеряна где-то.
  3. Раздел if (! $ path) обрабатывает простой случай, когда вы просто хотите загрузить файл в текущий каталог, используя имя, указанное в URL-адресе.

Используйте оболочку bash для Windows 10, которая включает wget после установки функции Windows.

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

Есть ли в Windows PowerShell нативная альтернатива wget ?

Вот простой PS 3.0 и более поздний однострочный, который работает и не требует большого количества PS barf:

Обратите внимание, что:

При установке Windows Server Core вам нужно записать это как

До 20 сентября 2014 года я предложил

как ответ. Однако это работает не во всех случаях, поскольку оператор > (который является псевдонимом Out-File ) преобразует входные данные в Unicode.

Если вы используете Windows 7, вам необходимо установить версию 4 или более новую платформу Windows Management Framework.

Вы можете обнаружить, что выполнение $ProgressPreference = "silentlyContinue" перед Invoke-WebRequest значительно улучшит скорость загрузки с большими файлами; эта переменная контролирует, отображается ли пользовательский интерфейс прогресса.

Если вам просто нужно получить файл, вы можете использовать метод DownloadFile объекта WebClient :

Где $url - строка, представляющая URL-адрес файла, а $path - локальный путь, в который будет сохранен файл.

Обратите внимание, что $path должен включать имя файла; это не может быть просто каталог.

В следующей версии PowerShell 3 существует Invoke-WebRequest :

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

В качестве альтернативы (и я рекомендую это) вы можете использовать биты:

Он покажет прогресс и загрузит файл в текущий каталог.

PowerShell V4 One-liner:

Это в основном Уоррен (удивительный) однострочный V3 (спасибо за это!) - с небольшим изменением, чтобы он работал в PowerShell V4.

Однострочник Уоррена - который просто использует wget а не iwr - все равно должен работать для V3 (по крайней мере, я думаю, хотя и не проверял его). Тем не мение. Но при попытке выполнить его в PowerShell V4 (как я пытался) вы увидите, что PowerShell не удается разрешить wget как допустимый командлет / программу.

Для тех, кто заинтересован, это - как я понял из комментария Боба в ответ на принятый ответ (спасибо, мужик!) - потому что в PowerShell V4 wget и curl имеют псевдоним Invoke-WebRequest , по умолчанию установлен в iwr . Таким образом, wget не может быть разрешен (так же как curl не может работать здесь).

В данной статье я хочу поговорить о установке и использовании консольной утилиты GNU Wget в операционной системе Windows.

Возможности Wget не ограничиваются одной лишь загрузкой архивов, утилита умеет создавать локальные копии web-сайтов с полным сохранением структуры каталогов и файлов. Помимо этого возможна конвертация сохраненных html-файлов для просмотра сайта в автономном режиме. Считывая заголовки файлов и сравнивая их с ранее загруженными файлами, Wget может загружать новые версии файлов, благодаря чему можно создавать обновляемые зеркала сайтов.

Для того чтобы установить Wget, перейдите по ссылке и скачайте установочный exe-файл. Запустите exe-файл и установите Wget как обычную программу, по умолчанию утилита устанавливается C:\Program Files (x86)\GnuWin32.

Для запуска утилиты нужна командная строка Windows, запускаем ее через меню пуск или сочетанием клавиш Win+R, в открывшемся окне ввести "cmd" и нажать Enter. После запуска командной строки сразу пользоваться Wget, как это происходит в ОС Linux, не получится, сначала нужно указать местоположение файла wget.exe.

Файл wget.exe находится в каталоге bin, внутри установочной директории. Для указания файла используется команда path.

Теперь можно запустить Wget, для начала можно просмотреть вывод команды help со списком дополнительных опций.

Список дополнительных опций утилиты Wget под спойлером.

Обычные копирование и вставка (Ctrl+C, Ctrl+V) в командной строке Windows не работают. Чтобы скопировать текст из командной строки Windows, нужно просто выделить нужный фрагмент текста и нажать Enter.

Для вставки текста в командную строку, нужно кликнуть правой кнопкой мыши по окну командной строки, выбрать подменю "Изменить" и дальше выполнить требуемую команду. Копирование и вставка существенно облегчают работу с командной строкой Windows.

Давайте рассмотрим несколько примеров использования утилиты Wget.

Допустим что нам нужно скачать какой нибудь файл, пусть это будет титульное изображение для этой статьи. Для этого нужно просто указать URL (ссылку) нужного файла, например так.

Иногда Wget может ругаться на "самоподписанные сертификаты" при использовании HTTPS-ссылок, хотя с самими сертификатами все в порядке, в таком случае нужно использовать дополнительную опцию "--no-check-certificate".

При обычном вызове командной строки Windows сохранение файла будет происходить в пользовательский каталог C:\Users\Username. Если файл требуется сохранить в какой-либо определенный каталог, то его необходимо указать при помощи дополнительного ключа "-P", пусть это будет каталог test на диске C (C:\test).

Если файл должен быть сохранен в определенном каталоге, то существует более простой способ сохранения файла, без указания дополнительных опций. Зайдите в нужный каталог через проводник Windows, зажмите клавишу Shift и кликните по области каталога правой кнопкой мыши, в открывшемся меню выберите "Открыть окно команд".

Открывшаяся командная строка станет выглядеть следующим образом.

windows wget

Выполните команду path, для указания местоположения wget.exe.

Теперь все будет сохраняться именно в эту папку.

Давайте представим что у нас есть некий файл со списком ссылок, которые необходимо скачать. Пусть это будет файл test.txt расположенный в пользовательском каталоге C:\Users\Username, со следующим содержанием.

Дополнительный ключ "-i" будет указывать на расположение файла - C:\Users\Username\test.txt и все файлы из списка будут сохранены.

Чтобы скачать сайт целиком достаточно просто указать его адрес c минимально необходимым набором опций, например.

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

Комбинируя набор доп. опций в командах Wget можно добиться разных результатов. Так что пробуйте все самостоятельно и изучайте возможности утилиты.

Читайте также: