Ist das Herunterladen über die Windows-Befehlszeile möglich?

123

Kann ich über die Windows-Befehlszeile herunterladen, ohne nicht standardmäßige Hilfsprogramme (einschließlich Windows) zu verwenden?

Die bevorzugte Version ist Windows XP, aber es ist auch interessant, für neuere Versionen zu wissen.

Um meine Frage weiter zu klären:

  • Es muss HTTP verwendet werden
  • Die Datei muss gespeichert werden
  • Standardmäßig saubere Windows-Installation, keine zusätzlichen Tools

Da jeder Wget schreit , möchte ich im Grunde eine einfache Wget-Funktionalität, ohne Wget zu verwenden.

Robert Massa
quelle
6
Weitere Ideen unter "Wenn der einzige Browser in Windows nicht mehr funktioniert, wie kann eine Verbindung zum Internet hergestellt werden?" bei superuser.com/questions/50427/…
Arjan
Und welche der zwölf Windows XP-Versionen wäre das?
Arjan
Angenommen, es kann sich um eine beliebige Windows XP SP2-Version handeln und alles, was später veröffentlicht wird.
Robert Massa
@arjan Interessante Frage, aber es gibt noch keine endgültige Antwort.
Robert Massa
Ich hätte nach "edition" fragen sollen. Wie Starter, Home, Professional, Media Center, Tablet, vielleicht sogar Embedded (gute Änderung für Tools, denke ich!) ... oder die europäischen Versionen ohne Windows Media Player. :-)
Arjan

Antworten:

51

Sie können ein VBScript schreiben und es über die Befehlszeile ausführen

Erstellen Sie eine Datei downloadfile.vbsund fügen Sie die folgenden Codezeilen ein:

' Set your settings
    strFileURL = "http://www.it1.net/images/it1_logo2.jpg"
    strHDLocation = "c:\logo.jpg"

' Fetch the file
    Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP")

    objXMLHTTP.open "GET", strFileURL, false
    objXMLHTTP.send()

If objXMLHTTP.Status = 200 Then
Set objADOStream = CreateObject("ADODB.Stream")
objADOStream.Open
objADOStream.Type = 1 'adTypeBinary

objADOStream.Write objXMLHTTP.ResponseBody
objADOStream.Position = 0    'Set the stream position to the start

Set objFSO = CreateObject("Scripting.FileSystemObject")
If objFSO.Fileexists(strHDLocation) Then objFSO.DeleteFile strHDLocation
Set objFSO = Nothing

objADOStream.SaveToFile strHDLocation
objADOStream.Close
Set objADOStream = Nothing
End if

Set objXMLHTTP = Nothing

Führen Sie es wie folgt von der Befehlszeile aus:

cscript.exe downloadfile.vbs 
phuclv
quelle
1
Ich frage mich, ob dies auf dem Internet Explorer beruht, aber ich denke, dies wäre eine gute Antwort für "Wenn der einzige Browser in Windows tot ist, wie kann man eine Verbindung zum Internet herstellen?" bei superuser.com/questions/50427/… :-)
Arjan
das ist, wenn die Erlaubnis zu cscript.exe erlaubt ist
hello_there_andy
Ich kann bestätigen, dass ich dieses Skript in Windows PE 5.1 getestet habe und es wie ein Zauber funktioniert hat. Ich beabsichtige, es für die Offline-Bereitstellung zu verwenden, um die Version der Plattform auf dem USB-Laufwerk anhand einer auf dem Server gespeicherten Textdatei zu überprüfen.
Wayfarer
74

Ab Windows 7 gibt es meines Erachtens eine einzige Methode, die noch nicht erwähnt wurde:

Syntax:

bitsadmin / transfer Auftragsname        / Download / Priorität Prioritäts-    URL   lokal \ Pfad \ Datei

Beispiel:

bitsadmin / transfer mein downloadjob / download / priorität normal ^
                  http://beispiel.com/dateiname.zip C: \ Benutzer \ Benutzername \ Downloads \ Dateiname.zip

( ^Zur besseren Lesbarkeit in zwei separate Zeilen unterteilt (um das Scrollen zu vermeiden).)

Warnung: Wie in den Kommentaren erwähnt, bitsadminbeginnt die Hilfemeldung mit den Worten:

BITSAdmin is deprecated and is not guaranteed to be available in future versions of Windows.
Administrative tools for the BITS service are now provided by BITS PowerShell cmdlets.

... aber ein anderer Kommentar berichtete, dass es unter Windows 8 funktioniert.

Zeitverschiebung
quelle
16
Es ist Teil von Windows7.
Akira
3
funktionierte nicht auf meinem Windows 7 ...
jyz
3
Dies hätte die am häufigsten gewählte Antwort sein sollen. bitsadmin wird jedoch zugunsten von Windows Powershell abgelehnt.
Lenkite
3
Bestätigen Sie die Arbeit an Win7
Kaiser
7
Hinweis: 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.
Ujjwal Singh
39

Windows 7 enthält PowerShell und es gibt so gut wie nichts, was Sie mit PowerShell nicht tun können.

Alternative zu Windows PowerShell?

user15130
quelle
16
(New-Object Net.WebClient) .DownloadFile ('someurl', 'somepath')
Jason Stangroome
3
Powershell ist für Powerrangers ! Wie dumm ist das und warum zum Teufel wusste ich nichts davon? Tschüss cmd.
Kaiser
17
von cmd.exe: powershell -command "& { iwr http://www.it1.net/it1_logo2.jpg -OutFile logo.jpg }". funktioniert auch von der Run-Eingabeaufforderung
Janus Troelsen
1
Ja, ohne Powershell geht es nicht. Es ist eine echte turing Tarpit :)
Jcarpenter2
@JanusTroelsen meine Version von PowerShell antwortete "Der Begriff 'iwr' wird nicht als Name eines Cmdlets erkannt, ...", aber nach einigen Nachforschungen funktionierte dies ähnlich:powershell -command "$clnt = new-object System.Net.WebClient; $clnt.DownloadFile(\"https://host/name\", \"outpufilename\")"
Rogerdpack
25

PowerShell (in Windows 8 und in .NET für frühere Versionen enthalten) verfügt über diese Funktion. Mit dem powershellBefehl können beliebige PowerShell-Befehle über die Befehlszeile oder eine .batDatei ausgeführt werden. Daher ist die folgende Zeile gefragt:

powershell -command "& { (New-Object Net.WebClient).DownloadFile('http://example.com/', 'c:\somefile') }"
Nik
quelle
2
Dies gibt keine Antwort auf die Frage. Wenn Sie einen Autor kritisieren oder um Klärung bitten möchten, hinterlassen Sie einen Kommentar unter seinem Beitrag. Sie können jederzeit Ihre eigenen Beiträge kommentieren. Wenn Sie über eine ausreichende Reputation verfügen, können Sie jeden Beitrag kommentieren .
Harrymc
3
@ Harrymc sicher, es ist eine Antwort. es lädt eine Datei herunter. was willst du noch?
Janus Troelsen
1
(1) Ein Text, der erläutert, was dieser Einzeiler bedeutet. (2) Stellen Sie sicher, dass Ihre Antwort keine alternative Formulierung zu einer vorherigen Antwort ist, da sie allenfalls als Kommentar zu dieser Antwort ausgedrückt werden sollte.
Harrymc
Welche Version von Windows und PowerShell ist erforderlich, damit dies funktioniert?
Peter Mortensen
2
Dies funktioniert in Windows Server 2012 nicht. Es
löst
17

Ich habe einen Weg gefunden, es zu tun, aber wirklich, installiere einfach Wget .

Sie können den Internet Explorer über eine Befehlszeile (iexplore.exe) verwenden und anschließend eine URL als Argument eingeben. Führen Sie also Folgendes aus:

iexplore.exe http://blah.com/filename.zip

Unabhängig davon, um welche Datei es sich handelt, müssen Sie im Voraus angeben, dass keine Bestätigung erforderlich ist. Und siehe da, der Download wird automatisch durchgeführt. Also ja, es ist technisch möglich, aber der gute Herr macht es auf eine andere Art und Weise.

DHayes
quelle
Ich weiß, wget ist ein viel besserer Weg, es ist nur eine hypothetische Frage;) Ihre Antwort kommt ziemlich nahe, erfordert aber immer noch Benutzereingriffe (Klicken auf "Speichern" oder Konfigurieren, um diesen Dialog nicht anzuzeigen)
Robert Massa
3
Wie ich bereits sagte, müssen Sie die Option deaktivieren, um zum Speichern für diesen Dateityp aufzufordern. Laden Sie beispielsweise eine Zip-Datei herunter, deaktivieren Sie diese Eingabeaufforderung, und in Zukunft werden alle Zip-Dateien, auf die über die Befehlszeile zugegriffen wird, automatisch gespeichert.
DHayes
1
+1, obwohl ich es nicht validiert habe, funktioniert (aber die endgültige Aussage ist sehr wahr)
Arjan
1
+1 für "Lieber Herr, mach das nicht so" ... :)
quack quixote
12

Windows Explorer (nicht zu verwechseln mit Internet Explorer) kann Dateien über HTTP herunterladen. Geben Sie einfach die URL in die Adressleiste ein. Oder über die Befehlszeile, zum Beispiel C:\windows\explorer.exe http://somewhere.com/filename.ext.

Sie erhalten die klassische Dateidownload- Eingabeaufforderung. Sofern es sich bei der Datei nicht um einen Typ handelt, für den Windows Explorer die Anzeige von Inline-Dateien (.html, .jpg, .gif) versteht, müssen Sie in diesem Fall mit der rechten Maustaste darauf klicken, um die Datei zu speichern.

Ich habe dies gerade auf meinem VMware- Image einer Neuinstallation von Windows XP 2002 SP1 getestet und es funktioniert einwandfrei.

Chris Noe
quelle
4
Dies erfordert Benutzerinteraktion. wahrscheinlich nicht das, was die meisten Leute, die eine Datei von der Eingabeaufforderung herunterladen wollen
Kip
Heutzutage hängt es von Ihrem Standard-Browser ab. Meins ist Chrome und wird automatisch an einen bekannten Speicherort heruntergeladen. Ich halte diese Lösung daher für ausreichend für meine Anforderungen. Vielen Dank!
KayleeFrye_onDeck
7

Sie können (in einem Windows-Standardschläger) Folgendes verwenden:

powershell -command "& { iwr http://www.it1.net/it1_logo2.jpg -OutFile logo.jpg }"

Es scheint PowerShell v4 zu erfordern ...

(Dank diesem Kommentar und diesem )

Anthony O.
quelle
6

Verwenden Sie FTP.

Von der Kommandozeile:

ftp ftp.somesite.com
user
password

usw. FTP ist in jeder Windows-Version enthalten, an die ich mich erinnern kann. wahrscheinlich nicht in 3.1, vielleicht nicht in Windows 95 , aber sicher alles danach.

@RM: Es wird schwierig, wenn Sie keine anderen Tools herunterladen möchten. Es gibt eine Befehlszeile für Wget für Windows und Wget wurde entwickelt, um genau das zu tun, wonach Sie fragen.

Satanicpuppy
quelle
+1 gute Antwort. ftp ist ziemlich universell, solange der Server, den Sie herunterladen möchten, es unterstützt.
DaveParillo
Vielen Dank, sorry, ich war nicht genauer, ich meinte die Verwendung von HTTP.
Robert Massa
1
Dies funktioniert bei den meisten FTP-Servern nicht, da der passive Modus von diesem Windows-FTP-Client nicht unterstützt wird (NATs zwischen passivem Modus sind erforderlich).
Peter Mortensen
@PeterMortensen Die Frage wird auch nicht aus der Ferne beantwortet, da er sie bearbeitet hat, um anzugeben, dass er nach Funktionen für wget gesucht hat. Aber lass dich nicht davon abhalten, eine 7-jährige falsche Antwort wiederzubeleben, nur um etwas Pedanterie hinzuzufügen.
Satanicpuppy
4

Verwenden Sie PowerShell wie folgt:

  1. Erstellen Sie eine download.ps1-Datei:

    param($url, $filename)
    $client = new-object System.Net.WebClient 
    $client.DownloadFile( $url, $filename)
    
  2. Jetzt können Sie eine Datei wie diese herunterladen:

    powershell Set-ExecutionPolicy Unrestricted
    powershell -ExecutionPolicy RemoteSigned -File "download.ps1" "http://somewhere.com/filename.ext" "d:\filename.ext"
    
Thomas Jespersen
quelle
Dies funktioniert auch unter Windows XP 64-Bit PowerShell 2.0.
Peter Mortensen
1

Wenn Sie Telnet installieren, können Sie möglicherweise eine HTTP-Anfrage an einen Server senden, um eine Datei herunterzuladen.

Sie können Cygwin auch installieren und mit wget auch eine Datei herunterladen. Dies ist eine sehr einfache Möglichkeit, Dateien von der Befehlszeile herunterzuladen.

EvilChookie
quelle
2
Ich bin mir ziemlich sicher, dass 'cygwin' als nicht standardmäßiges Hilfsprogramm gilt ;-)
DaveParillo
Telnet ist eine interessante Option. Gibt es eine Möglichkeit, die Ausgabe in eine Datei umzuleiten, ohne sie zu beschädigen? Und können wir HTTP GET-Befehl in Telnet umleiten, um die Anfrage zu stellen?
Robert Massa
Telnet installieren? Telnet ist wie FTP; es kommt mit Fenstern. Ich weiß jedoch nicht, wie ich die Ausgabe umleiten soll.
Satanicpuppy
Für XP (wie in der Frage) ist Telnet standardmäßig installiert, aber ich habe gehört, dass unter Vista das nicht mehr der Fall ist? Aber nein, es sind keine Dateidownloads möglich, es sei denn, alles wird in einer einzigen HTTP-Antwort zurückgegeben, und man kann die Header entfernen und das Zeug auch in der Befehlszeile dekodieren. Es ist sehr unwahrscheinlich, dass man das kontrollieren kann.
Arjan,
1
Warum Cygwin installieren, um wget zu benutzen? Es gibt eine native Win32-Binärdatei.
am
1

Es gibt einige Möglichkeiten, die Sie über die Befehlszeile in Windows herunterladen können:

  1. Sie können Cygwin verwenden .

    Hinweis: Die enthaltenen Apps sind keine nativen Linux-Apps. Sie müssen Ihre Anwendung aus dem Quellcode neu erstellen, wenn Sie sie unter Windows ausführen möchten.

  2. Unter Verwendung von Telnet ist es möglich, eine Anfrage zu stellen, aber Sie werden keine Bearbeitung sehen.

  3. Sie können Fledermaus- oder VBS-Skripte schreiben.

  4. Schreiben Sie Ihr eigenes Programm, das Sie von cmd.exe ausführen können.

Jesus
quelle
1

Sie können die Linux-Anwendung Wget unter Windows installieren. Es kann von http://gnuwin32.sourceforge.net/packages/wget.htm heruntergeladen werden . Sie können dann den Befehl 'wget (inserturlhere)' oder eine andere URL in Ihrer Eingabeaufforderung eingeben und diese URL / Datei / Bild herunterladen.

Peter Mortensen
quelle
1
Seltsamerweise ist diese Version nicht immer kompatibel. Auf meinem Windows 7-Computer lag es nicht daran, dass Bibliotheken fehlten. Sie möchten wget die meiste Zeit ohne zusätzliche Bibliotheken verwenden. users.ugent.be/~bpuype/wget
sinni800
0

In Standard-Windows können Sie nicht über HTTP herunterladen. Windows ist ein GUI-zentriertes Betriebssystem, daher fehlen viele der Befehlszeilentools, die Sie in anderen Betriebssystemen finden wgetwürden , wie z . B. das, was der Hauptkandidat wäre.

System.Net.WebClient.DownloadFile(), eine Funktion in der WiniNetAPI, kann Dateien herunterladen, aber ich bin nicht sicher, wie weit Sie mit der tatsächlichen Entwicklung im Vergleich zu einer Batch-Datei kommen.

Andrew Scagnelli
quelle
Ich verstehe, dass es möglich ist, wget zu verwenden, aber meine Frage besagt, dass keine nicht standardmäßigen Windows-Hilfsprogramme verwendet werden.
Robert Massa
0

Wenn Sie Python installiert haben, finden Sie hier ein Beispiel, das die Datei get-pip.py aus dem Web abruft

python -c "import urllib; urllib.urlretrieve ('https://bootstrap.pypa.io/get-pip.py', r'C:\python27\Tools\get-pip.py')"
Sipherlab
quelle