Herunterladen von Dateien von der Befehlszeile in Windows wie Wget oder Curl

348

Wie kann ich etwas direkt aus dem Internet herunterladen, ohne dass Internet Explorer oder Firefox Acrobat Reader / Quicktime / MS Word / irgendetwas öffnen?

Ich verwende Windows, also würde eine Windows-Version von Wget ausreichen .

Peter Mortensen
quelle
Klicken Sie einfach mit der rechten Maustaste auf eine Datei und wählen Sie "Ziel speichern unter" oder "Link speichern unter" oder "Speichern unter" (die Sprache variiert je nach Browser).
BrainSlugs83
25
Wenn Sie einen Befehl haben, können Sie eine Stapeldatei schreiben und sie (möglicherweise als Task geplant) jederzeit ausführen. Das ist, wo die GUI kurz fällt.
Jbm
4
Wie lade ich mit MS Word herunter?
Jaime Hablutzel
5
@JaimeHablutzel Warum möchten Sie jemals etwas über MS Word herunterladen? MS Word ist kein Terminal.
Braden Best
1
@ SDsolar Oder verbessern Sie diese Antwort unten.
Franklin Yu

Antworten:

180

Wget für Windows sollte funktionieren.

Aus den Wget Wiki FAQ :

GNU Wget ist ein kostenloses Netzwerkdienstprogramm zum Abrufen von Dateien aus dem World Wide Web über HTTP und FTP, die beiden am häufigsten verwendeten Internetprotokolle. Sie arbeitet nicht interaktiv und ermöglicht so die Arbeit im Hintergrund, nachdem Sie sich abgemeldet haben.

In diesem Abschnitt der FAQ werden Download-Links empfohlen:

Windows-Binärdateien

Stattdessen wird ein Link mit freundlicher Genehmigung von Jernej Simončič verwendet.

clearkimura
quelle
9
Es gibt auch Winwget cybershade.us/winwget, wenn Sie eine GUI bevorzugen
Col
13
Die eigenständige Version kann über diesen Link heruntergeladen werden .
Vito Gentile
5
Neuere, sogar aktuelle Windows-Builds (Stand: heute) , bereitgestellt von Jernej Simončič
Gras Double,
1
@cixelsyd Aktualisierter Link zu einer alternativen Quelle.
Clearkimura
1
eternallybored.org/misc/wget/ wird von Enterprise Antivirus auf meinem System markiert. Carbon Black / Bit 9. Wahrscheinlich falsch positiv. Aber SourceForge wird ausgeführt. Unterstützt nicht sslv3.
TamusJRoyce
311

Eine Alternative, die ich kürzlich mithilfe von PowerShell entdeckt habe:

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

Es funktioniert auch mit GET-Abfragen.

Wenn Sie Anmeldeinformationen zum Herunterladen der Datei angeben müssen, fügen Sie die folgende Zeile dazwischen hinzu:

$client.Credentials =  Get-Credential                

Eine Standard-Windows-Eingabeaufforderung für Anmeldeinformationen wird angezeigt. Die dort eingegebenen Anmeldeinformationen werden zum Herunterladen der Datei verwendet. Sie müssen dies nur einmal für die gesamte Zeit tun, in der Sie das $ client-Objekt verwenden.

Ubeogesh
quelle
91
Sie können es auch in einer Zeile tun:(new-object System.Net.WebClient).DownloadFile('http://www.xyz.net/file.txt','C:\tmp\file.txt')
Schellack
16
@ Rob Powershell ist in Windows integriert ...
nhinkle
9
Ab Vista ja.
Arran
3
@ BrainSlugs83, absolut, aber viele, viele Leute benutzen immer noch XP. Es ist nur etwas zu bedenken.
Arran
4
@ BrainSlugs83, Sie unterschätzen die Anzahl der Personen, die sich noch auf älteren Windows-Systemen befinden. Ich verstehe das Problem nicht, ich wies darauf hin, dass es nur auf Vista aufwärts ist. Die Leute können es ignorieren oder "Hey, danke!" Sagen, aber du ...? Wenn Sie ein Problem haben, erstellen Sie einen Chat und wir können uns unterhalten. Jemand mit Vertretern (wie Sie) sollte erkennen, dass hier nicht der richtige Ort für diese Diskussion ist.
Arran
83

Wenn Sie über PowerShell> = 3.0 verfügen, können Sie Invoke-WebRequest verwenden

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

Oder golfen

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

Laden Sie eine Datei über HTTP in Windows herunter

Steven Penny
quelle
Dies funktioniert nicht mit Weiterleitungen auf SourceForge (und möglicherweise auf anderen Websites) im Gegensatz zu System.Net.WebClient. Sie können jedoch Invoke-WebRequestArbeit machen , indem Sie hinzufügen -UserAgent [Microsoft.PowerShell.Commands.PSUserAgent]::FireFox.
Ela782
Gibt es eine Option, um den Fortschritt des Downloads zu sehen?
Franklin Yu
@ FranklinYu der Fortschritt wird zeigen, ob die Datei groß genug ist
Steven Penny
Gibt es eine Option , um keine outfile angeben, aber immer noch speichern (wie wgetoder curl -O, curl --remote-nameoder curl -J?)
Tomasz Gandor
60

Windows hat ein eigenes Dienstprogramm zum Herunterladen der Befehlszeile - BITSAdmin :

BITSAdmin ist ein Befehlszeilentool, mit dem Sie Download- oder Upload-Aufträge erstellen und deren Fortschritt überwachen können.

EDIT : 26.01.15 - Hier ist meine Übersicht, wie eine Datei unter Windows ohne externe Tools heruntergeladen werden kann

Und ein vollständiges bitsadmin-Beispiel:

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

Edit : 15.05.2018 - es hat sich herausgestellt, dass es auch möglich ist, eine Datei mit certutil herunterzuladen :

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

Certutil wird unter XP / Win2003 nicht standardmäßig installiert, ist jedoch unter den neueren Windows-Versionen verfügbar. Für XP / 2003 benötigen Sie das Admin Tool Pack für Windows Server 2003

npocmaka
quelle
7
Interessant. Das ist ein ungeschicktes Stück Software im Vergleich zu Wget.
Matt H
2
Beachten Sie, dass es nicht mit Windows XP geliefert wird und möglicherweise auch nicht mit anderen Versionen.
Ian Dunn
12
Update: BITSAdmin ist veraltet und wird in zukünftigen Windows-Versionen nicht mehr garantiert. Die Verwaltungstools für den BITS-Dienst werden jetzt von BITS PowerShell-Cmdlets bereitgestellt.
nulldev07
2
@MattH: weil es nicht nötig ist, überhaupt wget zu sein? - siehe en.wikipedia.org/wiki/Background_Intelligent_Transfer_Service
Peterchen
4
Datei kann nicht hinzugefügt werden - 0x80070057
Tomáš Zato
32

Speichern Sie den folgenden Text als wget.jsund rufen Sie einfach an

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

Dies ist der Code:

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");
*/
user190042
quelle
In welcher Sprache ist dieses Skript? Sieht für meine aktuelle Aufgabe nützlich aus. Ich möchte mehr Referenzdokumentation finden. Sieht nicht so aus wie vb
G-.
1
Nützlich für einzelne Dateien. Muss für rekursiven Download und https verbessert werden.
Opticyclic
4
@G-. Ich bin zu spät zur Party, aber das ist JavaScript.
Prooffreader
Ich habe versucht, das für database.clamav.net/daily.cvd zu tun , aber es hat nur 88kB von 44MB heruntergeladen :(
kokbira 10.10.17
22

Es ist eine native cURL für Windows verfügbar hier . Es gibt viele Varianten - mit und ohne SSL-Unterstützung.

Sie brauchen kein zusätzliches Gepäck von Cygwin und anderen, sondern nur eine kleine EXE-Datei.


Es ist auch wichtig zu wissen, dass in allen modernen Versionen von Windows Powershell beide wgetund curlAliase integriert sind. Sie sind gleichwertig.

Es sind keine zusätzlichen Dateien oder Downloads erforderlich, um wgetFunktionen zu erhalten :

Verwenden von Curl In Powershell (The Sociable Geek)

Auszug:

Sie können einen cURL-Befehl wie einen eingeben, der eine Datei aus einem GitHub-Repository herunterlädt.

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

und es scheint, als ob es funktioniert, aber was es tatsächlich tut, ist nur cURL als Alias ​​zu verwenden. In diesem Fall erhalten Sie nur die Header anstelle der Datei.

Mit Aliasen in PowerShell können Sie Verknüpfungen für längere Befehle erstellen, damit Sie diese nicht ständig eingeben müssen.

Wenn Sie den Befehl Get-Alias ​​eingeben, wird eine Liste aller in PowerShell verwendeten Aliase angezeigt. Wie Sie sehen, ruft der Befehl curl nur den Befehl Invoke-WebRequest auf. Sie sind ähnlich, aber nicht gleich, weshalb die obige Anfrage für uns nicht funktioniert.

Bildbeschreibung hier eingeben

Damit dies in PowerShell ordnungsgemäß funktioniert, verwenden Sie am einfachsten Variablen und das folgende -OutFileArgument:

Bildbeschreibung hier eingeben

(Dateiname in Bild " https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/mongodb-on-ubuntu/azuredeploy.json " abgeschnitten )

Diese Syntax lädt den gesamten Inhalt der Zieldatei azuredeploy.jsonin die lokale Datei herunternewfile.json


Der Hauptvorteil ist, dass es in Powershell selbst integriert ist, sodass dieser Code direkt ausgeführt wird, ohne dass Downloads oder andere zusätzliche Dateierstellungen erforderlich sind, damit es auf jeder modernen Windows-Version funktioniert.

SDsolar
quelle
Dies kann direkt in einer Zeile erfolgen, aber die Zeile wird ziemlich lang und ist auf einen Blick nicht so sofort lesbar.
SDsolar
21

Ich habe eine schnelle myGet.bat-Datei erstellt, die die oben beschriebene PowerShell-Methode aufruft.

@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

Ich habe mir einen Code von der Parsing-URL für den Dateinamen mit Leerzeichen ausgeliehen .

MartinC
quelle
1
Warum die Gegenstimme? Das sieht für mich in Ordnung aus und ist eine direkte Antwort auf die Frage. Ja, es ist klobig und könnte eine Verbesserung gebrauchen, wie das Entweichen von kaufmännischem Und (&) in der URL, aber es funktioniert so, wie es ist.
Matt Wilkie
Wäre es nicht einfacher, ein PowerShell-Skript zu schreiben?
SamB
1
powershell.exe -Command "Invoke-WebRequest -OutFile ./file-name https://location/file-name"<- Einfache einzeilige PowerShell-Verwendung in Speicherort und Dateiname der Skriptdatei.
James Eby
8

Ich habe nach dem gleichen gesucht und da ich kein Privileg hatte, eines der oben genannten Pakete zu installieren, habe ich mir eine kleine Umgehung vorgenommen (um mehr als 30 Dateien herunterzuladen):

  • Ich habe eine Batch-Datei erstellt
  • Listete alle Dateien auf
  • Setzen Sie firefox.exeam Anfang jeder Zeile
  • Ging zum Firefox-Verzeichnis in Program Files
  • Ran es.
Simon
quelle
4

Wenn PowerShell eine Option ist, ist dies die bevorzugte Route, da Sie (möglicherweise) nichts extra installieren müssen:

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

Gelingt dies nicht, ist Wget für Windows, wie andere bereits betont haben, definitiv die zweitbeste Option. Wie in einer anderen Antwort angegeben, können Sie Wget entweder ganz alleine herunterladen oder als Teil von Cygwin oder MSys herunterladen .

Wenn aus irgendeinem Grund, findet man sich in einer Zeitschleife hängen geblieben zu finden, eine Maschine , die nicht Powershell hat und Sie haben null Zugang zu einem funktionierenden Web - Browser (das heißt, ist der Internet Explorer der einzige Browser auf dem System, und seine Einstellungen sind beschädigt) und Ihre Datei befindet sich auf einer FTP-Site (im Gegensatz zu HTTP):

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

Wenn Speicher verwendet wird, ist er seit Windows 98 vorhanden, und ich kann bestätigen, dass er in Windows 8 RTM noch vorhanden ist (möglicherweise müssen Sie appwiz.cplFunktionen hinzufügen / entfernen, um ihn zu erhalten). Mit diesem Dienstprogramm können Sie Dateien von / zu FTP-Sites im Web herunterladen und hochladen. Es kann auch in Skripten verwendet werden, um beide Vorgänge zu automatisieren.

Das integrierte Tool hat mir in der Vergangenheit das Leben gerettet, besonders in den Tagen von ftp.cdrom.com. Ich habe Firefox auf einem komplett kaputten Computer, der nur über ein DFÜ-Internet verfügte, einmal auf diese Weise heruntergeladen Verbindung (damals, als die maximale Paketgröße von sneakernet noch 1,44 MB betrug und Firefox immer noch "Netscape" hieß / me does trollface ).

Ein paar Tipps: Es ist ein eigener Befehlsprozessor und hat eine eigene Syntax. Versuchen Sie, "Hilfe" einzugeben. Alle FTP-Sites erfordern einen Benutzernamen und ein Passwort. Wenn sie jedoch "anonyme" Benutzer zulassen, lautet der Benutzername "anonym" und das Passwort ist Ihre E-Mail-Adresse (Sie können sich eine ausdenken, wenn Sie nicht verfolgt werden möchten, aber normalerweise gibt es eine Art Logik, um sicherzustellen, dass dies der Fall ist eine gültige E-Mail-Adresse).

BrainSlugs83
quelle
+1 für das Denken an Kommandozeilen-FTP! Wget und Powershell wurden jedoch bereits erwähnt, bevor Sie der Party beigetreten sind. : - /
Matt Wilkie
Die anderen PowerShell-Antworten, die ich sah, waren alle Multi-Liner und / oder hatten einen gewissen Code-Geruch - dies ist ein kurzer und einfacher Einzeiler zum Herunterladen einer Datei. - Auch ich wollte eine Antwort geben, die alle Grundlagen abdeckt. :-)
BrainSlugs83
1
Ich bin nicht sicher, warum Sie zwei Fragezeichen in der C:\tmp\file.tx??t
Ploni
3

Cygwin hat Wget (und viele weitere Dienstprogramme).

Rich Homolka
quelle
2

Und http://www.httrack.com/ hat eine nette GUI (und es ist kostenlos), um Websites zu spiegeln. Es hat auch eine Linux-Version.

Zsolt Botykai
quelle
2

Sie können auch das wgetin PowerShell enthaltene Produkt verwenden . ; ^) Zum Öffnen drücke die Windows-Taste und tippe "Powershell" oder Windows-R und tippe "Powershell" und drücke die Eingabetaste.

Keine Installation notwendig.

Ein interessanter Unterschied zu herkömmlichen wget(mehr unter diesem Link ): Sie können nicht einfach das Größer-als-Zeichen verwenden, um eine Pipe zu einer Datei zu erstellen. wgetin PowerShell ist nur ein Convenience-Wrapper für Invoke-WebRequest, und Sie müssen seine Syntax verwenden, um in eine Datei zu schreiben.

wget https://superuser.com/questions/25538 -OutFile rubySlippers.html
Ruffin
quelle
1
-OutFilehat den Job gemacht!
Dimitry K
1

Sie können WGet für Windows hier herunterladen . Alternativ können Sie mit der rechten Maustaste auf den Download-Link des Elements klicken, das Sie herunterladen möchten, und Speichern unter auswählen. Dadurch wird die Datei heruntergeladen und nicht in der zugewiesenen Anwendung geöffnet.

BinaryMisfit
quelle
1

Ich denke, die Installation wgetüber Chocolatey ist der einfachste Weg.

  1. Installieren Sie Chocolatey
  2. Geben Sie in der Befehlszeile Folgendes ein: choco install wget
  3. Sie können dann wgetüber die Befehlszeile wie auf * nix-Systemen verwenden.
sivabudh
quelle
1

Suche nach /downloadFunktion auf https://lolbas-project.github.io .

Im Augenblick gibt es Bitsadmin.exe, Certutil.exe, Esentutl.exe, Expand.exe, Extrac32.exe, Findstr.exe, Hh.exe, Ieexec.exe, Makecab.exe, Replace.exefür Windows Vista, Windows 7, Windows 8, Windows - 8.1, Microsoft Windows 10 und die entsprechenden Server - Versionen.

noraj
quelle
0

Wenn Sie eine grafische Benutzeroberfläche benötigen , probieren Sie VisualWget aus , das tatsächlich sauber und mit allen Funktionen ausgestattet ist. Es basiert auf GNU Wget für seine Download-Engine.

EDIT: Link aktualisiert.

Wurlitzer
quelle
1
Hier ist ein aktualisierter Link: sites.google.com/site/visualwget/… (die Downloads finden Sie unten auf der Seite. Verwenden Sie die kleinen Pfeile auf der rechten Seite.)
Reed Hedges
0

Wie in dieser SU-Antwort dokumentiert , können Sie in Powershell Folgendes verwenden:

Import-Module bitstransfer
start-bitstransfer -source http://something/something.ext -destination c:\something.ext
Dolan Antenucci
quelle
-1

Eine Alternative zur Verwendung von gnuwin32 ist unxutils, das wget enthält.

Chris Chilvers
quelle
Sie können mit unxutils umgehen, aber es ist alt, es verwendet eine alte Version von wget. gnuwin32 ist das Ding, das man benutzen muss. Nicht ganz so bequem zu installieren und nicht so leicht zu finden, aber es hat viel mehr als nur Unxutils.
Barlop
-3

Wenn Sie einen visuellen Beitrag für Windows benötigen , finden Sie hier einen.
Sie können Daten oder Dateien damit posten.

WeGoToMars
quelle