È possibile scaricare utilizzando la riga di comando di Windows?


123

Senza utilizzare utility non standard (incluso Windows), è possibile effettuare il download utilizzando la riga di comando di Windows?

La versione preferita è Windows XP, ma è anche interessante sapere per le versioni più recenti.

Per chiarire ulteriormente la mia domanda:

  • Deve utilizzare HTTP
  • Il file deve essere salvato
  • Installazione di Windows pulita standard, senza strumenti aggiuntivi

Quindi in pratica, dato che tutti urlano Wget , voglio una semplice funzionalità di Wget, senza usare Wget.


6
Altre idee in "Se l'unico browser di Windows è morto, come connettersi a Internet?" su superuser.com/questions/50427/…
Arjan,

E quale delle dodici versioni di Windows XP sarebbe?
Arjan,

Diciamo che può essere qualsiasi versione di Windows XP SP2 e tutto ciò che viene rilasciato in seguito.
Robert Massa,

@arjan Domanda interessante, ma non c'è ancora una risposta definitiva.
Robert Massa,

Avrei dovuto chiedere "edizione". Come Starter, Home, Professional, Media Center, Tablet, forse anche Embedded (credo che un buon cambiamento per gli strumenti lì!) ... O le versioni europee senza Windows Media Player. :-)
Arjan,

Risposte:


51

È possibile scrivere un VBScript ed eseguirlo dalla riga di comando

Crea un file downloadfile.vbse inserisci le seguenti righe di codice:

' 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

Eseguirlo dalla riga di comando come segue:

cscript.exe downloadfile.vbs 

1
Mi chiedo se questo si basa su Internet Explorer, ma suppongo che sarebbe una buona risposta per "Se l'unico browser di Windows è morto, come connettersi a Internet?" su superuser.com/questions/50427/… :-)
Arjan,

questo è se l'autorizzazione a cscript.exe è consentita
hello_there_andy il

Posso confermare di aver testato questo script in Windows PE 5.1 e ha funzionato come un fascino. Ho intenzione di usarlo per la distribuzione offline, al fine di verificare la versione della piattaforma nell'unità USB rispetto a un file di testo memorizzato sul server.
Viandante

74

A partire da Windows 7, credo che ci sia un solo metodo che non è stato ancora menzionato, è facile:

Sintassi:

bitsadmin / transfer job_name        / download / priorità priorità    URL   locale \ percorso \ file

Esempio:

bitsadmin / transfer mydownloadjob / download / priorità normale ^
                  http://example.com/filename.zip C: \ Users \ nomeutente \ Download \ nomefile.zip

(Suddiviso in due righe separate con ^per la leggibilità (per evitare lo scorrimento).)

Avvertenza: come sottolineato nei commenti, il bitsadminmessaggio di aiuto inizia dicendo:

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.

... ma un altro commento ha riferito che funziona su Windows 8.


16
fa parte di windows7.
Akira,

3
non ha funzionato su Windows 7 ...
jyz

3
Questa avrebbe dovuto essere la risposta più votata. Tuttavia, bitsadmin è deprecato a favore di Windows PowerShell.
Lenkite,

3
Conferma di lavorare su Win7
kaiser il

7
Nota: BITSAdmin è obsoleto e non è garantito che sia disponibile nelle versioni future di Windows. Gli strumenti di amministrazione per il servizio BITS sono ora forniti dai cmdlet BITS PowerShell.
Ujjwal Singh,

39

Windows 7 include PowerShell e non c'è praticamente nulla che non puoi fare con PowerShell.

Alternativa nativa a wget in Windows PowerShell?


16
(New-Object Net.WebClient) .DownloadFile ('someurl', 'somepath')
Jason Stangroome

3
Powershell è per Powerrangers ! Quanto è divertente e perché diamine non lo sapevo? Byebye cmd.
Kaiser

17
da cmd.exe: powershell -command "& { iwr http://www.it1.net/it1_logo2.jpg -OutFile logo.jpg }". funziona anche dal prompt della corsa
Janus Troelsen,

1
Sì, non c'è niente che non puoi fare senza PowerShell. È un vero tarpit turing :)
jcarpenter2

@JanusTroelsen la mia versione di PowerShell ha risposto "Il termine 'iwr' non è riconosciuto come il nome di un cmdlet, ..." ma dopo alcune indagini questo simile ha funzionato:powershell -command "$clnt = new-object System.Net.WebClient; $clnt.DownloadFile(\"https://host/name\", \"outpufilename\")"
rogerdpack,

25

PowerShell (incluso con Windows 8 e incluso con .NET per le versioni precedenti) ha questa funzionalità. Il powershellcomando consente di eseguire comandi PowerShell arbitrari dalla riga di comando o da un .batfile. Pertanto, la seguente riga è ciò che si desidera:

powershell -command "& { (New-Object Net.WebClient).DownloadFile('http://example.com/', 'c:\somefile') }"

2
Questo non fornisce una risposta alla domanda. Per criticare o richiedere chiarimenti a un autore, lascia un commento sotto il suo post: puoi sempre commentare i tuoi post e una volta che avrai una reputazione sufficiente sarai in grado di commentare qualsiasi post .
harrymc,

3
@harrymc sicuramente è una risposta. scarica un file. Cosa volete di più?
Janus Troelsen,

1
(1) Qualche testo per spiegare cosa significa questo one-liner, (2) Verifica che la tua risposta non sia una formulazione alternativa a una risposta precedente, poiché se lo è, dovrebbe al massimo essere espressa come un commento su quella risposta.
harrymc,

Quale versione di Windows e PowerShell è necessaria affinché funzioni?
Peter Mortensen,

2
questo non funziona nella FYI di Windows Server 2012, genera un metodoInvocationException
knocte

17

Ho trovato un modo per farlo, ma davvero, installa Wget .

È possibile utilizzare Internet Explorer da una riga di comando (iexplore.exe) e quindi immettere un URL come argomento. Quindi, esegui:

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

Qualunque sia il file, è necessario specificare che non è necessario confermare in anticipo. Ecco, eseguirà automaticamente il download. Quindi sì, è tecnicamente possibile, ma il buon signore lo fa in modo diverso.


So che wget è un modo molto migliore, è solo una domanda ipotetica;) La tua risposta è abbastanza vicina, ma richiede comunque l'intervento dell'utente (facendo clic su "Salva" o configurando di non visualizzare questa finestra di dialogo)
Robert Massa,

3
Come ho detto, devi deselezionare l'opzione per richiedere di salvare quel tipo di file. Ad esempio, scarica un file zip, disabilita quel prompt e in futuro i file zip a cui accedi dalla riga di comando verranno automaticamente salvati.
DHayes,

1
+1, anche se non ho convalidato, funziona (ma l'affermazione finale è molto vera)
Arjan,

1
+1 per "caro signore, non farlo in questo modo" ... :)
Quack Quixote,

12

Windows Explorer (da non confondere con Internet Explorer) può scaricare file tramite HTTP. Basta inserire l'URL nella barra degli indirizzi. O dalla riga di comando, ad esempio C:\windows\explorer.exe http://somewhere.com/filename.ext.

Viene visualizzato il classico prompt di download dei file . A meno che il file non sia di un tipo che Esplora risorse di Windows sa come visualizzare in linea (.html, .jpg, .gif), nel qual caso sarà necessario fare clic con il pulsante destro del mouse per salvarlo.

Ho appena provato questo sulla mia immagine VMware di un'installazione vergine di Windows XP 2002 SP1 e funziona benissimo.


4
questo richiede l'interazione dell'utente. probabilmente non è quello che vogliono la maggior parte delle persone che vogliono scaricare un file dal prompt dei comandi
Kip

Oggi dipende dal tuo browser predefinito. Il mio è Chrome e si scarica automaticamente in una posizione nota, quindi considero questa soluzione sufficiente per le mie esigenze. Grazie!
kayleeFrye_onDeck

7

Puoi usare (in una mazza standard di Windows):

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

Sembra richiedere PowerShell v4 ...

(Grazie a quel commento ea questo )


6

Usa FTP.

Dalla riga di comando:

ftp ftp.somesite.com
user
password

ecc. FTP è incluso in ogni versione di Windows che ricordo; probabilmente non in 3.1, forse non in Windows 95 , ma sicuramente tutto dopo.

@RM: sarà difficile se non si desidera scaricare altri strumenti. Esiste una riga di comando Wget per Windows e Wget è progettato per fare esattamente quello che stai chiedendo.


+1 buona risposta. ftp è piuttosto universale, a condizione che il server da cui provi a scaricare lo supporti.
DaveParillo,

Grazie, scusa non ero più specifico, intendevo usare HTTP.
Robert Massa,

1
Questo non funzionerà con la maggior parte dei server FTP poiché la modalità passiva non è supportata da questo client ftp di Windows (con NAT tra la modalità passiva è richiesto).
Peter Mortensen,

@PeterMortensen Inoltre non risponde in remoto alla domanda da quando l'ha modificata per specificare che stava cercando la funzionalità di wget. Ma non lasciare che ciò ti impedisca di far risorgere una risposta sbagliata di 7 anni solo per aggiungere un po 'di pedanteria.
Satanicpuppy,

4

Usa PowerShell in questo modo:

  1. Crea un file download.ps1:

    param($url, $filename)
    $client = new-object System.Net.WebClient 
    $client.DownloadFile( $url, $filename)
    
  2. Ora puoi scaricare un file come questo:

    powershell Set-ExecutionPolicy Unrestricted
    powershell -ExecutionPolicy RemoteSigned -File "download.ps1" "http://somewhere.com/filename.ext" "d:\filename.ext"
    

Funziona anche su Windows XP 64 bit, PowerShell 2.0.
Peter Mortensen,

1

Se installi Telnet, immagino che potresti effettuare una richiesta HTTP su un server per scaricare un file.

Puoi anche installare Cygwin e usare wget per scaricare anche un file. Questo è un modo molto semplice per scaricare file dalla riga di comando.


2
Sono abbastanza sicuro che "cygwin" sia considerato un'utilità non standard ;-)
DaveParillo,

Telnet è un'opzione interessante, c'è un modo per convogliare l'output in un file senza corromperlo? E possiamo inoltrare il comando HTTP GET in telnet per effettuare la richiesta?
Robert Massa,

Installa telnet? Telnet è come ftp; viene fornito con windows. Non so di reindirizzare l'output però.
Satanicpuppy,

Per XP (come nella domanda) telnet è installato di default, ma ho sentito che su Vista non è più così? Ma no, non consente il download di file, a meno che non venga restituito tutto in una singola risposta HTTP, e si possono eliminare le intestazioni e decodificare anche le cose sulla riga di comando. È abbastanza improbabile che si possa controllarlo.
Arjan,

1
Perché installare cygwin solo per usare wget? È disponibile un binario nativo win32.
innaM,

1

Esistono alcuni modi che è possibile scaricare utilizzando la riga di comando in Windows:

  1. Puoi usare Cygwin .

    Nota: le app incluse non sono app Linux native. È necessario ricostruire l'applicazione dall'origine se si desidera eseguire su Windows.

  2. Utilizzando telnet è possibile effettuare una richiesta ma non si vedrà alcuna elaborazione.

  3. Puoi scrivere script bat o VBS.

  4. Scrivi il tuo programma che puoi eseguire da cmd.exe.


1

È possibile installare l'applicazione Linux Wget su Windows. Può essere scaricato da http://gnuwin32.sourceforge.net/packages/wget.htm . È quindi possibile emettere il comando 'wget (inserturlhere)' o qualsiasi altro URL nel prompt dei comandi e ciò consentirà di scaricare tale URL / file / immagine.


1
Stranamente questa versione non è sempre compatibile. Sul mio computer Windows 7 non era perché mancavano le librerie. Vorresti usare wget senza librerie extra per la maggior parte del tempo. users.ugent.be/~bpuype/wget
sinni800


0

In Windows predefinito, non è possibile scaricare tramite HTTP. Windows è un sistema operativo incentrato sulla GUI, quindi manca di molti degli strumenti a riga di comando che potresti trovare in altri sistemi operativi, come wgetil candidato principale.

System.Net.WebClient.DownloadFile(), una funzione WiniNetdell'API, può scaricare file, ma non sono sicuro di quanto tu stia andando nello sviluppo effettivo rispetto a un file batch.


Capisco che è possibile utilizzare wget, ma la mia domanda afferma senza l'uso di utility Windows non standard.
Robert Massa,

0

Se hai installato Python ecco un esempio che recupera get-pip.py dal web

python -c "import urllib; urllib.urlretrieve ('https://bootstrap.pypa.io/get-pip.py', r'C:\python27\Tools\get-pip.py')"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.