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 .

Peter Mortensen
źródło
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č.

clearkimura
źródło
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 $.

Ubeogesh
źródło
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

Steven Penny
źródło
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

npocmaka
źródło
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");
*/
użytkownik190042
źródło
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.

SDsolar
źródło
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ą .

MartinC
źródło
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.
Simon
źródło
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).

BrainSlugs83
źródło
+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
3

Cygwin ma Wget (i wiele innych narzędzi).

Rich Homolka
źródło
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
Ruffin
źródło
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.

BinaryMisfit
źródło
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.
sivabudh
źródło
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.

noraj
źródło
0

Jeśli chcesz mieć GUI, wypróbuj VisualWget , który jest właściwie czysty i ma pełną funkcjonalność. Opiera się na GNU Wget dla silnika pobierania.

EDYCJA: zaktualizowany link.

Wurlitzer
źródło
1
tutaj jest zaktualizowany link: sites.google.com/site/visualwget/… (pliki do pobrania znajdują się na dole strony, użyj małych strzałek po prawej stronie)
Reed Hedges
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
Dolan Antenucci
źródło
-1

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

Chris Chilvers
źródło
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.

WeGoToMars
źródło