Jak pobierać pliki z wiersza poleceń w systemie Windows, takie jak wget lub curl


348

Jak mogę pobrać coś bezpośrednio z Internetu bez otwierania przeglądarki Internet Explorer lub Firefox Acrobat Reader / Quicktime / MS Word / cokolwiek innego?

Korzystam z systemu Windows, więc zrobiłaby to wersja Wget dla systemu Windows .


Wystarczy kliknąć prawym przyciskiem myszy plik i nacisnąć „Zapisz cel jako” lub „Zapisz link jako” lub „Zapisz jako” (język różni się w zależności od przeglądarki).
BrainSlugs83

25
Istotą polecenia jest możliwość napisania pliku wsadowego i uruchomienia go (być może zaplanowanego jako zadanie) w dowolnym momencie. Właśnie tam brakuje GUI.
Jbm

4
Jak pobierasz za pomocą MS Word?
Jaime Hablutzel,

5
@JaimeHablutzel Dlaczego miałbyś chcieć pobierać coś przez MS Word? MS Word nie jest terminalem.
Braden Best

1
@ SDsolar Lub po prostu głosuj / popraw tę odpowiedź poniżej.
Franklin Yu,

Odpowiedzi:


180

Wget dla Windows powinien działać.

Z FAQ Wget Wiki :

GNU Wget to bezpłatne narzędzie sieciowe do pobierania plików z Internetu za pomocą HTTP i FTP, dwóch najczęściej używanych protokołów internetowych. Działa nieinteraktywnie, umożliwiając pracę w tle po wylogowaniu.

W tej sekcji FAQ sugerowane są linki do pobrania:

Pliki binarne systemu Windows

Zamiast tego zastosowano link z uprzejmością Jernej Simončič.


9
Istnieje również Winwget cybershade.us/winwget, jeśli wolisz GUI
Col

13
Wersję autonomiczną można pobrać z tego linku .
Vito Gentile

5
Nowsze, nawet aktualne (na dzień dzisiejszy) kompilacje Windows , dostarczone przez Jernej Simončič
Gras Double

1
@cixelsyd Zaktualizowano link do alternatywnego źródła.
clearkimura

1
eternallybored.org/misc/wget/ jest oznaczony przez program antywirusowy w moim systemie. Sadza / Bit 9. Prawdopodobnie fałszywie dodatni. Ale sourceforge jeden działa. Nie obsługuje sslv3.
TamusJRoyce

311

Alternatywę odkryłem niedawno przy użyciu programu PowerShell:

$client = new-object System.Net.WebClient
$client.DownloadFile("http://www.xyz.net/file.txt","C:\tmp\file.txt")

Działa również z zapytaniami GET.

Jeśli musisz określić poświadczenia, aby pobrać plik, dodaj następujący wiersz między:

$client.Credentials =  Get-Credential                

Pojawi się standardowy monit o poświadczenia systemu Windows. Poświadczenia, które tam wprowadzisz, zostaną wykorzystane do pobrania pliku. Musisz to zrobić tylko raz, cały czas będziesz używać obiektu klienta $.


91
Możesz to również zrobić w jednym wierszu:(new-object System.Net.WebClient).DownloadFile('http://www.xyz.net/file.txt','C:\tmp\file.txt')
schellack

16
@Rob powershell jest wbudowany w Windows ...
nhinkle

9
Od wersji Vista tak.
Arran

3
@ BrainSlugs83, absolutnie, ale wiele, wiele ludzie są wciąż przy XP. To tylko coś, o czym należy pamiętać.
Arran

4
@ BrainSlugs83, nie doceniasz liczby osób wciąż korzystających ze starszych systemów Windows. Nie rozumiem tego problemu, wskazałem, że dotyczy to wyłącznie systemu Vista w górę. Ludzie mogą to zignorować lub powiedzieć „hej, dziękuję!”, Ale ty ....? Jeśli masz problem, utwórz czat, a my będziemy mogli porozmawiać. Ktoś z przedstawicielem (jak ty) powinien zdać sobie sprawę , że tutaj nie ma miejsca na tę dyskusję.
Arran

83

Jeśli masz PowerShell> = 3.0, możesz użyć Invoke-WebRequest

Invoke-WebRequest -OutFile index.html http://superuser.com

Lub grał w golfa

iwr -outf index.html http://superuser.com

Pobierz plik przez HTTP w Windows


W przeciwieństwie do tego nie działa to z przekierowaniami na sourceforge (i ewentualnie innych witrynach) System.Net.WebClient. Możesz jednak Invoke-WebRequestpracować, dodając -UserAgent [Microsoft.PowerShell.Commands.PSUserAgent]::FireFox.
Ela782

Czy jest opcja, aby zobaczyć postęp pobierania?
Franklin Yu,

@FranklinYu postęp pokaże, czy plik jest wystarczająco duży
Steven Penny

Czy istnieje opcja, aby nie określać pliku wyjściowego, ale nadal zapisywać (jak wgetlub curl -O, curl --remote-namelub curl -J?)
Tomasz Gandor

60

System Windows ma własne narzędzie do pobierania z wiersza poleceń - BITSAdmin :

BITSAdmin to narzędzie wiersza polecenia, którego można używać do tworzenia zadań pobierania lub wysyłania i monitorowania ich postępu.

EDYCJA : 26.01.15 - Oto mój przegląd tego, jak plik można pobrać na Windows bez zewnętrznych narzędzi

I kompletny przykład bitsadmin:

bitsadmin /transfer myDownloadJob /download /priority normal http://downloadsrv/10mb.zip c:\10mb.zip

Edycja : 15.05.2018 - okazało się, że można pobrać również plik z certutil :

certutil.exe -urlcache -split -f "https://download.sysinternals.com/files/PSTools.zip" pstools.zip

Certutil nie jest instalowany domyślnie na XP / Win2003, ale jest dostępny w nowszych wersjach systemu Windows. Na XP / 2003 potrzebujesz pakietu narzędzi administratora dla systemu Windows Server 2003


7
Ciekawy. To jeden niezgrabny program w porównaniu do wget.
Matt H

2
Pamiętaj, że nie jest on dostarczany z systemem Windows XP, a może także nie z innymi wersjami.
Ian Dunn

12
Aktualizacja: BITSAdmin jest przestarzały i nie ma gwarancji, że będzie dostępny w przyszłych wersjach systemu Windows. Narzędzia administracyjne dla usługi BITS są teraz dostarczane przez cmdlety BITS PowerShell.
nulldev07

2
@MattH: bo przede wszystkim nie można być wgetem? - patrz en.wikipedia.org/wiki/Background_Intelligent_Transfer_Service
peterchen

4
Nie można dodać pliku - 0x80070057
Tomáš Zato,

32

Zapisz następujący tekst jako wget.jsi po prostu zadzwoń

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

To jest kod:

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");
*/

W jakim języku jest ten skrypt? Wydaje się przydatny w moim bieżącym zadaniu. Chciałbym znaleźć więcej dokumentacji referencyjnej. Nie wygląda całkiem jak vb
G-.

1
Przydatny w przypadku pojedynczych plików. Wymaga rozszerzenia rekurencyjnego pobierania i https.
opticyclic

4
@SOL-. Jestem spóźniony na imprezę, ale to JavaScript.
prooffreader

Próbowałem to zrobić dla database.clamav.net/daily.cvd , ale pobrałem tylko 88 kB z 44 MB :(
kokbira 10.10.17

22

Jest rodowitym cURL dla Windows dostępnego tutaj . Dostępnych jest wiele smaków - z obsługą protokołu SSL i bez niego.

Nie potrzebujesz dodatkowego bagażu Cygwin i podobnych, tylko jeden mały plik EXE.


Ważne jest również, aby wiedzieć, że istnieją zarówno wgeti curlaliasy wbudowanych w nowoczesnych wersjach Windows PowerShell. Są równoważne.

Do uzyskania wgetfunkcjonalności nie są wymagane żadne dodatkowe pliki ani pliki do pobrania :

Korzystanie z Curl In Powershell (The Sociable Geek)

Fragment:

Możesz wpisać polecenie cURL, takie jak to, które pobiera plik z repozytorium GitHub.

curl http://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/mongodb-on-ubuntu/azuredeploy.json

i wygląda na to, że działa, ale tak naprawdę używa po prostu cURL jako aliasu. W powyższym przypadku to, co się stanie, to po prostu otrzymasz nagłówki zamiast samego pliku.

Aliasy w programie PowerShell pozwalają tworzyć skróty do dłuższych poleceń, dzięki czemu nie trzeba ich cały czas wpisywać.

Jeśli wpiszesz polecenie Get-Alias, wyświetli się lista wszystkich aliasów używanych w PowerShell. Jak widać, polecenie curl po prostu wywołuje polecenie Invoke-WebRequest. Są podobne, ale nie takie same, dlatego powyższe żądanie nie działa dla nas.

wprowadź opis zdjęcia tutaj

Aby to działało poprawnie w PowerShell, najprostszym sposobem jest użycie zmiennych i -OutFileargumentu, jak pokazano tutaj:

wprowadź opis zdjęcia tutaj

(nazwa pliku odcięta na obrazie „ https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/mongodb-on-ubuntu/azuredeploy.json ”)

Ta składnia pobierze pełną zawartość pliku docelowego azuredeploy.jsondo pliku lokalnegonewfile.json


Podstawową zaletą jest to, że jest on wbudowany w sam Powershell, więc ten kod będzie wykonywany bezpośrednio bez pobierania lub wymagane są dodatkowe kreacje plików, aby działał na dowolnej nowoczesnej wersji systemu Windows.


Można to zrobić bezpośrednio w jednej linii, ale linia robi się dość długa i nie jest tak łatwa do odczytania na pierwszy rzut oka.
SDsolar

21

Zrobiłem szybki plik myGet.bat, który wywołuje opisaną powyżej metodę 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

Pożyczyłem trochę kodu z Parsing URL na nazwę pliku ze spacją .


1
dlaczego głosowanie negatywne? wydaje mi się to w porządku i jest bezpośrednią odpowiedzią na pytanie. Tak, jest niezgrabny i przydałby się ulepszeń, takich jak unikanie znaków ampersands (&) w adresie URL, ale działa tak, jak jest.
matt wilkie 24.04.2013

Czy nie byłoby łatwiej napisać skrypt PowerShell?
SamB

1
powershell.exe -Command "Invoke-WebRequest -OutFile ./file-name https://location/file-name"<- Proste użycie PowerShell w jednym wierszu w lokalizacji skryptu w twardym kodzie lokalizacji i nazwy pliku.
James Eby

8

Szukałem tego samego, a ponieważ nie miałem przywileju zainstalowania żadnego z powyższych pakietów, zdecydowałem się na małe obejście (aby pobrać 30 + plików):

  • Utworzyłem plik wsadowy
  • Wymienione wszystkie pliki
  • Umieść firefox.exena początku każdej linii
  • Udałem się do katalogu firefox w Program Files
  • Zrobiłem to.

4

Jeśli PowerShell jest opcją, jest to preferowana trasa, ponieważ (potencjalnie) nie będziesz musiał instalować niczego dodatkowego:

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

W przeciwnym razie Wget dla Windows, jak zauważyli inni, jest zdecydowanie drugą najlepszą opcją. Jak napisano w innej odpowiedzi, wygląda na to, że możesz pobrać Wget samodzielnie lub pobrać go jako część Cygwin lub MSys .

Jeśli z jakiegoś powodu utkniesz w czasie, używając maszyny, która nie ma programu PowerShell i masz zerowy dostęp do działającej przeglądarki internetowej (to znaczy, że Internet Explorer jest jedyną przeglądarką w systemie i jej ustawieniami są uszkodzone), a plik znajduje się na stronie FTP (w przeciwieństwie do HTTP):

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

Jeśli pamięć działa, jest tam od systemu Windows 98 i mogę potwierdzić, że nadal jest ona dostępna w systemie Windows 8 RTM (może być konieczne wejście appwiz.cpli dodanie / usunięcie funkcji, aby ją uzyskać). To narzędzie może zarówno pobierać, jak i przesyłać pliki do / z witryn FTP w Internecie. Może być również używany w skryptach do automatyzacji dowolnej operacji.

To narzędzie, które jest wbudowane, było dla mnie prawdziwym narzędziem ratującym życie, szczególnie w czasach ftp.cdrom.com - pobrałem Firefoksa w ten sposób raz, na całkowicie zepsutą maszynę, która miała tylko Internet dial-up połączenie (wstecz, kiedy maksymalny rozmiar pakietu sneakernet wciąż wynosił 1,44 MB, a Firefox wciąż nazywał się „Netscape” / ja robi trollface ).

Kilka wskazówek: jest to własny procesor poleceń i ma własną składnię. Spróbuj wpisać „pomoc”. Wszystkie witryny FTP wymagają nazwy użytkownika i hasła; ale jeśli zezwalają „anonimowym” użytkownikom, nazwa użytkownika jest „anonimowa”, a hasło to Twój adres e-mail (możesz je wymyślić, jeśli nie chcesz być śledzony, ale zwykle istnieje pewna logika, aby upewnić się, że jest to prawidłowy adres e-mail).


+1 za myślenie o ftp z linii poleceń! Jednak zarówno wget, jak i powerhell zostały wspomniane na długo przed dołączeniem do drużyny, więc -1 tam. : - /
matt wilkie 24.04.2013

Inne odpowiedzi PowerShell, które widziałem, były wielowarstwowe i / lub zawierały w sobie trochę kodu - jest to krótki i prosty linijka do pobrania pliku. - Chciałem także udzielić odpowiedzi obejmującej wszystkie podstawy. :-)
BrainSlugs83

1
Nie jestem pewien, dlaczego masz dwa znaki zapytania w pliku docelowymC:\tmp\file.tx??t
Ploni



2

Możesz także użyć wgetpakietu zapakowanego w PowerShell . ; ^) Aby otworzyć, naciśnij klawisz Windows i wpisz „powershell” lub Windows-R i wpisz „powershell” i naciśnij klawisz Return.

Nie wymaga instalacji.

Jedna interesująca różnica w stosunku do konwencjonalnej wget(więcej pod tym linkiem ): Nie można po prostu użyć polecenia „więcej niż” do potoku do pliku. wgetw PowerShell jest tylko wygodnym opakowaniem Invoke-WebRequest, a do zapisu do pliku musisz użyć jego składni.

wget https://superuser.com/questions/25538 -OutFile rubySlippers.html

1
-OutFilewykonał robotę!
Dimitry K

1

Możesz pobrać WGet dla Windows tutaj . Możesz też kliknąć prawym przyciskiem myszy link do pobrania elementu, który chcesz pobrać, i wybierz opcję Zapisz jako. Spowoduje to pobranie pliku i nie otworzenie go w przypisanej aplikacji.


1

Myślę, że instalacja wgetza pomocą Chocolatey jest najprostszym sposobem.

  1. Zainstaluj Chocolatey
  2. W wierszu polecenia wpisz: choco install wget
  3. Następnie możesz użyć wgetz wiersza poleceń, jak w systemach * nix.

1

Wyszukaj /downloadfunkcję na https://lolbas-project.github.io .

Teraz istnieją Bitsadmin.exe, Certutil.exe, Esentutl.exe, Expand.exe, Extrac32.exe, Findstr.exe, Hh.exe, Ieexec.exe, Makecab.exe, Replace.exeWindows Vista, Windows 7, Windows 8, Windows 8.1, Windows 10 i równoważnych wersjach serwera.



0

Jak udokumentowano w tej odpowiedzi SU , w Powershell można użyć następujących opcji:

Import-Module bitstransfer
start-bitstransfer -source http://something/something.ext -destination c:\something.ext

-1

Alternatywą dla używania gnuwin32 jest unxutils, który obejmuje wget.


możesz zarządzać za pomocą unxutils, ale jest stary, używa starej wersji wget. gnuwin32 jest rzeczą do użycia. nie dość wygodny w instalacji i nie tak łatwy do znalezienia, ale ma też znacznie więcej niż unxutils.
barlop

-3

Jeśli potrzebujesz wizualnego posta dla systemu Windows, oto jeden.
Możesz za jego pomocą publikować dane lub pliki.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.