Frage Wie man Dateien von der Befehlszeile in Windows wie wget oder curl herunterlädt


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

Ich benutze Windows, also eine Windows-Version von Wget würdest du.


283


Ursprung


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 hängt von Ihrem Browser ab). - BrainSlugs83
Der Punkt, an dem Sie einen Befehl haben, ist in der Lage, eine Batch-Datei zu schreiben und sie auszuführen (möglicherweise als Task geplant), wann immer Sie wollen. Das ist, wo die GUI nicht ausreicht. - Jbm
Wie lade ich mit MS Word? - Jaime Hablutzel
@JaimeHablutzel Warum möchtest du jemals etwas über MS Word herunterladen? MS Word ist kein Terminal. - Braden Best
@SDsolar Oder einfach upvote / verbessern diese Antwort unten. - Franklin Yu


Antworten:


Wget für Windows sollte arbeiten.

Von dem Wget Wiki FAQ:

GNU Wget ist ein kostenloses Netzwerk-Dienstprogramm zum Abrufen von Dateien aus der Welt   Wide Web mit HTTP und FTP, die beiden am weitesten verbreiteten Internet   Protokolle. Es funktioniert nicht-interaktiv und ermöglicht so die Arbeit in der   Hintergrund, nach dem Abmelden.

Von Dieser Abschnitt der FAQDownload-Links werden empfohlen:

Windows-Binärdateien

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


156



Es gibt auch Winwget cybershade.us/winwget wenn Sie eine Gui bevorzugen - Col
Die Standalone-Version kann heruntergeladen werden dieser Link. - Vito Gentile
Jünger, sogar aktuell (ab heute) Windows baut, zur Verfügung gestellt von Jernej Simončič - Gras Double
@ VitoShadow defekten Link - The Red Pea
@cixelsyd Aktualisierter Link zu einer alternativen Quelle. - clearkimura


Eine Alternative, die ich kürzlich mit 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 hinzu:

$client.Credentials =  Get-Credential                

Eine Eingabeaufforderung für Windows-Standardanmeldeinformationen wird angezeigt. Die Anmeldeinformationen, die Sie dort eingeben, werden zum Herunterladen der Datei verwendet. Sie müssen dies nur ein einziges Mal tun, während Sie das $ client-Objekt verwenden.


272



Sie können es auch in einer Zeile machen: (new-object System.Net.WebClient).DownloadFile('http://www.xyz.net/file.txt','C:\tmp\file.txt') - schellack
@Rob Powershell ist in Windows integriert ... - nhinkle♦
Von Vista aufwärts, ja. - Arran
@ BrainSlugs83, absolut, aber viele, viele, die Leute benutzen immer noch XP. Es ist nur etwas zu beachten. - Arran
@ BrainSlugs83, du unterschätzt die Menge der Leute noch auf älteren Windows-Systemen. Ich verstehe das Problem nicht, ich habe darauf hingewiesen, dass es nur auf Vista aufwärts geht. Leute können wählen, es zu ignorieren, oder "hey danke!" Sagen, aber Sie ....? Wenn Sie ein Problem haben, erstellen Sie einen Chat und wir können sprechen. Jemand mit Rep (wie du) sollte erkennen Hier ist nicht der Ort für diese Diskussion. - Arran


Wenn Sie PowerShell> = 3.0 haben, können Sie verwenden Invoke-WebRequest

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

Oder golfte

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

Laden Sie eine Datei über HTTP in Windows herunter


64



Dies funktioniert nicht mit Redirects auf Sourceforge (und möglicherweise anderen Sites), im Gegensatz zu System.Net.WebClient. Wie auch immer du es machen kannst Invoke-WebRequest Arbeit durch Hinzufügen -UserAgent [Microsoft.PowerShell.Commands.PSUserAgent]::FireFox. - Ela782
Das ist jetzt die richtige Antwort, @ CédricBelin hat Recht. Die Frage und die akzeptierte Antwort sind ziemlich alt. - Factor Mystic
Um dies von einem Cmd-Terminal aus auszuführen: powershell -command "& {&'iwr' index.html http://superuser.com}" - dario_ramos
Gibt es eine Option, um den Fortschritt des Downloads zu sehen? - Franklin Yu
@FranklinYu der Fortschritt wird angezeigt, wenn die Datei groß genug ist - Steven Penny


Windows hat sein eigenes Befehlszeilen-Download-Dienstprogramm - BITSAdmin:

BITSAdmin ist ein Befehlszeilentool, mit dem Sie Downloads erstellen können   oder laden Sie Jobs hoch und überwachen Sie deren Fortschritt.

BEARBEITEN: 26.01.15 - Hier ist mein Überblick darüber, wie eine Datei unter Windows ohne externe Tools heruntergeladen werden kann 

Und ein komplettes bitsadmin Beispiel:

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

Bearbeiten : 15.05.2018 - stellte sich heraus, dass es möglich ist, ein Datei mit Certutil auch:

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

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


39



Interessant. Das ist eine plumpe Software im Vergleich zu wget. - Matt H
Beachten Sie, dass es nicht mit Windows XP ausgeliefert wird und möglicherweise auch nicht mit anderen Versionen. - Ian Dunn
Update: BITSAdmin ist veraltet und es ist nicht garantiert, dass es in zukünftigen Windows-Versionen verfügbar ist. Verwaltungstools für den BITS-Dienst werden jetzt von BITS PowerShell-Cmdlets bereitgestellt. - nulldev07
@MattH: Weil es in erster Linie nicht wget ist? - sehen en.wikipedia.org/wiki/Background_Intelligent_Transfer_Service - peterchen
Die Datei konnte nicht hinzugefügt werden - 0x80070057 - Tomáš Zato


Speichern Sie den folgenden Text als wget.js und einfach anrufen

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

28



In welcher Sprache befindet sich dieses Skript? Sieht für meine aktuelle Aufgabe nützlich aus. Ich würde gerne mehr Referenzdokumente finden. Sieht nicht ganz nach Vb aus - G-.
Nützlich für einzelne Dateien. Needs Verbesserung für rekursive Download und https. - opticyclic
@G-. Ich bin zu spät zur Party, aber das ist JavaScript. - prooffreader
Ich habe versucht, das zu tun datenbank.clamav.net/daily.cvd, aber es heruntergeladen nur 88kB von 44MB :( - kokbira


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 etwas Code ausgeliehen Parsing URL für den Dateinamen mit Leerzeichen.


16



Warum der Downvote? Das sieht für mich gut aus und ist eine direkte Antwort auf die Frage. Ja, es ist klobig und könnte Verbesserungen verwenden, wie das Entkommen von kaufmännischen Und-Zeichen (&) in der URL, aber es funktioniert wie es ist. - matt wilkie


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

Sie brauchen das zusätzliche Gepäck nicht Cygwin und die Likes, nur eine kleine EXE-Datei.


Es ist auch wichtig zu wissen, dass es beides gibt wget und curl Aliase, die in allen modernen Versionen von Windows PowerShell integriert sind. Sie sind gleichwertig.

Es sind keine zusätzlichen Dateien oder Downloads erforderlich wgetFunktionalität:

Verwenden von Curl in Powershell (Der gesellige Geek)

Auszug:

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

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

und es wird so aussehen, als ob es funktioniert, aber was es gerade macht, ist einfach   Verwenden von CURL als Alias In dem obigen Fall wird was passieren wird   dass Sie nur die Header anstelle der Datei selbst erhalten.

Aliase in PowerShell ermöglichen es Ihnen, Verknüpfungen für längere Befehle zu erstellen, sodass Sie sie nicht ständig eingeben müssen.

Wenn Sie den Befehl Get-Alias ​​eingeben, erhalten Sie eine Liste aller Aliasnamen, die in PowerShell verwendet werden. Wie Sie sehen können, ruft der Befehl curl den Invoke-WebRequest Befehl auf. Sie sind ähnlich, aber nicht das Gleiche, weshalb die obige Anfrage für uns nicht funktioniert.

enter image description here

Um dies in PowerShell richtig zu machen, verwenden Sie am einfachsten Variablen und die -OutFile Argument wie hier gezeigt:

enter image description here

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

Diese Syntax lädt den gesamten Inhalt der Zieldatei herunter azuredeploy.json zu der lokalen Datei newfile.json


Der Hauptvorteil besteht darin, dass es in Powershell selbst integriert ist, so dass dieser Code direkt ohne Downloads ausgeführt werden kann oder andere zusätzliche Dateierstellungen erforderlich sind, damit er in jeder modernen Version von Windows funktioniert.


15



Dies kann direkt in einer Zeile erfolgen, aber die Zeile wird ziemlich lang und ist nicht sofort auf einen Blick lesbar. - SDsolar
Der beste Weg, danke - Konstantin Chernov


Ich war auf der Suche nach dem gleichen, und da ich kein Privileg hatte, eines der obigen Pakete zu installieren, entschied ich mich für eine kleine Problemumgehung (um 30 + Dateien herunterzuladen):

  • Ich habe eine Batch-Datei erstellt
  • Listet alle Dateien auf
  • Stellen firefox.exe am Anfang jeder Zeile
  • Ging zum firefox Verzeichnis in Program Files
  • Lief es.

8