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.
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.
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:
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 $.
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ę.
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.
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.
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.
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.
Aby to działało poprawnie w PowerShell, najprostszym sposobem jest użycie zmiennych i -OutFileargumentu, jak pokazano tutaj:
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
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):
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
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.
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.
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.
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:
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.
Odpowiedzi:
Wget dla Windows powinien działać.
Z FAQ Wget Wiki :
W tej sekcji FAQ sugerowane są linki do pobrania:
Zamiast tego zastosowano link z uprzejmością Jernej Simončič.
źródło
Alternatywę odkryłem niedawno przy użyciu programu PowerShell:
Działa również z zapytaniami GET.
Jeśli musisz określić poświadczenia, aby pobrać plik, dodaj następujący wiersz między:
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 $.
źródło
(new-object System.Net.WebClient).DownloadFile('http://www.xyz.net/file.txt','C:\tmp\file.txt')
Jeśli masz PowerShell> = 3.0, możesz użyć Invoke-WebRequest
Lub grał w golfa
Pobierz plik przez HTTP w Windows
źródło
System.Net.WebClient
. Możesz jednakInvoke-WebRequest
pracować, dodając-UserAgent [Microsoft.PowerShell.Commands.PSUserAgent]::FireFox
.wget
lubcurl -O
,curl --remote-name
lubcurl -J
?)System Windows ma własne narzędzie do pobierania z wiersza poleceń - BITSAdmin :
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:
Edycja : 15.05.2018 - okazało się, że można pobrać również plik z certutil :
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
źródło
Zapisz następujący tekst jako
wget.js
i po prostu zadzwońTo jest kod:
źródło
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
wget
icurl
aliasy wbudowanych w nowoczesnych wersjach Windows PowerShell. Są równoważne.Do uzyskania
wget
funkcjonalności nie są wymagane żadne dodatkowe pliki ani pliki do pobrania :Korzystanie z Curl In Powershell (The Sociable Geek)
Fragment:
Aby to działało poprawnie w PowerShell, najprostszym sposobem jest użycie zmiennych i
-OutFile
argumentu, jak pokazano tutaj:Ta składnia pobierze pełną zawartość pliku docelowego
azuredeploy.json
do 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.
źródło
Zrobiłem szybki plik myGet.bat, który wywołuje opisaną powyżej metodę PowerShell.
Pożyczyłem trochę kodu z Parsing URL na nazwę pliku ze spacją .
źródło
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.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):
firefox.exe
na początku każdej liniiProgram Files
źródło
Jeśli PowerShell jest opcją, jest to preferowana trasa, ponieważ (potencjalnie) nie będziesz musiał instalować niczego dodatkowego:
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):
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.cpl
i 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).
źródło
C:\tmp\file.tx??t
Cygwin ma Wget (i wiele innych narzędzi).
źródło
A http://www.httrack.com/ ma ładny GUI (i jest bezpłatny), do tworzenia kopii lustrzanych stron. Ma również wersję Linux.
źródło
Możesz także użyć
wget
pakietu 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.wget
w PowerShell jest tylko wygodnym opakowaniemInvoke-WebRequest
, a do zapisu do pliku musisz użyć jego składni.źródło
-OutFile
wykonał robotę!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.
źródło
Myślę, że instalacja
wget
za pomocą Chocolatey jest najprostszym sposobem.choco install wget
wget
z wiersza poleceń, jak w systemach * nix.źródło
Wyszukaj
/download
funkcję 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.exe
Windows Vista, Windows 7, Windows 8, Windows 8.1, Windows 10 i równoważnych wersjach serwera.źródło
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.
źródło
Jak udokumentowano w tej odpowiedzi SU , w Powershell można użyć następujących opcji:
źródło
Alternatywą dla używania gnuwin32 jest unxutils, który obejmuje wget.
źródło
Jeśli potrzebujesz wizualnego posta dla systemu Windows, oto jeden.
Możesz za jego pomocą publikować dane lub pliki.
źródło