Come scaricare file dalla riga di comando in Windows come wget o curl


348

Come posso scaricare qualcosa direttamente dal Web senza che Internet Explorer o Firefox aprano Acrobat Reader / Quicktime / MS Word / qualunque cosa?

Sto usando Windows, quindi farebbe una versione Windows di Wget .


Basta fare clic destro su un file e premere "Salva oggetto con nome" o "Salva collegamento con nome" o "Salva con nome" (la lingua varia in base al browser).
BrainSlugs83,

25
Il punto di avere un comando è riuscire a scrivere un file batch ed eseguirlo (magari pianificato come attività) ogni volta che lo si desidera. Ecco dove la GUI non è all'altezza.
Jbm

4
Come si scarica con MS Word?
Jaime Hablutzel,

5
@JaimeHablutzel Perché mai vorresti scaricare qualcosa tramite MS Word? MS Word non è un terminale.
Braden Best,

1
@SDsolar O semplicemente vota / migliora questa risposta qui sotto.
Franklin Yu,

Risposte:


180

Wget per Windows dovrebbe funzionare.

Dalle domande frequenti su Wiki Wget :

GNU Wget è un'utilità di rete gratuita per recuperare file dal World Wide Web usando HTTP e FTP, i due protocolli Internet più utilizzati. Funziona in modo non interattivo, consentendo in tal modo il lavoro in background, dopo essersi disconnesso.

Da questa sezione delle FAQ , sono suggeriti i collegamenti per il download:

File binari di Windows

Al suo posto viene utilizzato il collegamento con la cortesia di Jernej Simončič.


9
C'è anche Winwget cybershade.us/winwget se preferisci una gui
Col

13
La versione standalone è scaricabile da questo link .
Vito Gentile,

5
Build Windows più recenti, anche aggiornati (ad oggi) , forniti da Jernej Simončič
Gras Double,

1
@cixelsyd Link aggiornato a una fonte alternativa.
clearkimura,

1
eternallybored.org/misc/wget/ è contrassegnato dall'antivirus aziendale sul mio sistema. Carbon Black / Bit 9. Probabilmente falso positivo. Ma sourceforge uno corre. Non supporta sslv3.
TamusJRoyce,

311

Un'alternativa che ho scoperto di recente, usando PowerShell:

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

Funziona anche con le query GET.

Se è necessario specificare le credenziali per scaricare il file, aggiungere la seguente riga tra:

$client.Credentials =  Get-Credential                

Verrà visualizzato un prompt delle credenziali di Windows standard. Le credenziali immesse verranno utilizzate per scaricare il file. Devi solo farlo una volta per tutte le volte che utilizzerai l'oggetto $ client.


91
Puoi anche farlo in una sola riga:(new-object System.Net.WebClient).DownloadFile('http://www.xyz.net/file.txt','C:\tmp\file.txt')
schellack,

16
@Rob powershell è integrato in Windows ...
nhinkle

9
Da Vista in su, sì.
Arran,

3
@ BrainSlugs83, assolutamente, ma molte, molte persone usano ancora XP. È semplicemente qualcosa da tenere a mente.
Arran,

4
@ BrainSlugs83, sottovaluti la quantità di persone ancora sui sistemi Windows più vecchi. Non capisco il problema, ho sottolineato che è solo su Vista verso l'alto. Le persone possono scegliere di ignorarlo o dire "ehi grazie!", Ma tu ....? Se hai un problema, crea una chat e possiamo parlare. Qualcuno con rappresentante (come te) dovrebbe rendersi conto che qui non è il posto per questa discussione.
Arran,

83

Se hai PowerShell> = 3.0, puoi usare Invoke-WebRequest

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

O golf

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

Scarica un file via HTTP in Windows


Questo non funziona con i reindirizzamenti su sourceforge (e forse altri siti), al contrario di System.Net.WebClient. Tuttavia puoi Invoke-WebRequestaggiungere lavoro aggiungendo -UserAgent [Microsoft.PowerShell.Commands.PSUserAgent]::FireFox.
Ela782

C'è un'opzione per vedere l'avanzamento del download?
Franklin Yu,

@FranklinYu i progressi mostreranno se il file è abbastanza grande
Steven Penny

C'è un'opzione per non specificare un file outfile, ma comunque salvare (come wgeto curl -O, curl --remote-nameo curl -J?)
Tomasz Gandor

60

Windows ha una propria utilità di download da riga di comando - BITSAdmin :

BITSAdmin è uno strumento da riga di comando che puoi utilizzare per creare lavori di download o upload e monitorarne l'avanzamento.

EDIT : 26.01.15 - Ecco la mia panoramica di come un file può essere scaricato su Windows senza strumenti esterni

E un esempio completo di bitsadmin:

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

Modifica : 15.05.2018 - si è scoperto che è possibile scaricare anche un file con certutil :

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

Certutil non è installato per impostazione predefinita su XP / Win2003 ma è disponibile nelle versioni più recenti di Windows. Per XP / 2003 è necessario l' Admin Tool Pack per Windows Server 2003


7
Interessante. Questo è un software goffo rispetto a wget.
Matt H

2
Nota che non viene fornito con Windows XP e forse non con altre versioni.
Ian Dunn,

12
Aggiornamento: BITSAdmin è obsoleto e non è garantito per essere disponibile nelle versioni future di Windows. Gli strumenti di amministrazione per il servizio BITS sono ora forniti dai cmdlet di BITS PowerShell.
nulldev07,

2
@MattH: perché non dovresti essere wget in primo luogo? - vedi en.wikipedia.org/wiki/Background_Intelligent_Transfer_Service
peterchen

4
Impossibile aggiungere il file - 0x80070057
Tomáš Zato

32

Salva il seguente testo come wget.jse chiama semplicemente

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

Questo è il codice:

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

In che lingua è questo script? Sembra utile al mio compito attuale. Vorrei trovare più documentazione di riferimento. Non sembra proprio vb
G-.

1
Utile per singoli file. Ha bisogno di miglioramenti per il download ricorsivo e https.
ottico dal

4
@ G-. Sono in ritardo alla festa, ma è JavaScript.
Prooffreader,

Ho provato a farlo per database.clamav.net/daily.cvd , ma ha scaricato solo 88kB di 44MB :(
kokbira il

22

C'è un cURL nativo per Windows disponibile qui . Esistono molte versioni disponibili con e senza supporto SSL.

Non è necessario il bagaglio extra di Cygwin e simili, solo un piccolo file EXE.


È anche importante sapere che ci sono entrambi wgete gli curlalias integrati in tutte le versioni moderne di Windows Powershell. Sono equivalenti.

Non sono richiesti file o download aggiuntivi per ottenere wgetfunzionalità:

Utilizzando Curl In Powershell (The Sociable Geek)

Estratto:

È possibile digitare un comando cURL come uno che scarica un file da un repository GitHub.

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

e sembrerà che funzioni, ma quello che sta effettivamente facendo è semplicemente usare cURL come alias. Nell'istanza sopra, ciò che accadrà è che otterrai solo le intestazioni invece del file stesso.

Gli alias in PowerShell ti consentono di creare collegamenti per comandi più lunghi in modo da non doverli digitare sempre.

Se si digita il comando Get-Alias, verrà visualizzato un elenco di tutti gli alias utilizzati in PowerShell. Come puoi vedere, il comando curl chiama semplicemente il comando Invoke-WebRequest. Sono simili ma non uguali, motivo per cui la richiesta di cui sopra non funziona per noi.

inserisci qui la descrizione dell'immagine

Per farlo funzionare correttamente in PowerShell il modo più semplice è usare le variabili e l' -OutFileargomento come mostrato qui:

inserisci qui la descrizione dell'immagine

(nome del file tagliato nell'immagine " https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/mongodb-on-ubuntu/azuredeploy.json ")

Questa sintassi scaricherà l'intero contenuto del file di destinazione nel file azuredeploy.jsonlocalenewfile.json


Il vantaggio principale è che è integrato in Powershell stesso, quindi questo codice verrà eseguito direttamente senza download o sono necessarie altre creazioni di file extra per farlo funzionare su qualsiasi versione moderna di Windows.


Questo può essere fatto direttamente su una riga, ma la riga diventa piuttosto lunga e non è immediatamente leggibile a colpo d'occhio.
SDsolar,

21

Ho creato un rapido file myGet.bat che chiama il metodo PowerShell descritto sopra.

@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

Ho preso in prestito del codice dall'URL di analisi per il nome file con spazio .


1
perché il downvote? questo mi sembra a posto ed è una risposta diretta alla domanda. Sì, è goffo e potrebbe usare il miglioramento, come la fuga da e commerciali (&) nell'URL, ma funziona così com'è.
matt wilkie,

Non sarebbe più semplice scrivere uno script PowerShell ???
SamB,

1
powershell.exe -Command "Invoke-WebRequest -OutFile ./file-name https://location/file-name"<- Semplice utilizzo di una riga di PowerShell nella posizione di codifica del file di script e nel nome file.
James Eby,

8

Stavo cercando lo stesso, e dato che non avevo il privilegio di installare nessuno dei pacchetti sopra, ho optato per una piccola soluzione (per scaricare oltre 30 file):

  • Ho creato un file batch
  • Elencati tutti i file
  • Metti firefox.exeall'inizio di ogni riga
  • Sono andato alla directory di Firefox in Program Files
  • L'ho eseguito.

4

Se PowerShell è un'opzione, questa è la route preferita, poiché (potenzialmente) non dovrai installare nulla in più:

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

In caso contrario, Wget per Windows, come altri hanno sottolineato, è sicuramente la seconda opzione migliore. Come pubblicato in un'altra risposta sembra che tu possa scaricare Wget da solo , oppure puoi prenderlo come parte di Cygwin o MSys .

Se per qualche motivo, ti trovi bloccato in una distorsione temporale, usando una macchina che non ha PowerShell e non hai accesso a un browser Web funzionante (ovvero, Internet Explorer è l'unico browser sul sistema e le sue impostazioni sono danneggiati) e il tuo file si trova su un sito FTP (al contrario di HTTP):

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

Se la memoria serve è presente da Windows 98 e posso confermare che è ancora presente in Windows 8 RTM (potrebbe essere appwiz.cplnecessario accedere e aggiungere / rimuovere funzionalità per ottenerlo). Questa utility può sia scaricare sia caricare file da / verso siti FTP sul web. Può anche essere utilizzato negli script per automatizzare entrambe le operazioni.

Questo strumento incorporato è stato un vero salvavita per me in passato, soprattutto ai tempi di ftp.cdrom.com - ho scaricato Firefox in quel modo una volta, su una macchina completamente rotta che aveva solo una connessione Internet connessione (quando la dimensione massima del pacchetto di sneakernet era ancora 1,44 MB e Firefox era ancora chiamato "Netscape" / me fa trollface ).

Un paio di suggerimenti: è il suo processore dei comandi e ha una sua sintassi. Prova a digitare "aiuto". Tutti i siti FTP richiedono un nome utente e una password; ma se consentono agli utenti "anonimi", il nome utente è "anonimo" e la password è il tuo indirizzo e-mail (puoi crearne uno se non vuoi essere monitorato, ma di solito c'è una sorta di logica per assicurarti che sia un indirizzo email valido).


+1 per pensare alla riga di comando ftp! Comunque wget e powershell sono stati entrambi menzionati molto prima che tu ti unissi alla festa, quindi -1 lì. : - /
matt wilkie

Le altre risposte di PowerShell che ho visto erano tutte multilinea e / o avevano un po 'di odore di codice - questa è una breve e semplice riga per scaricare un file. - Volevo anche fornire una risposta che coprisse tutte le basi. :-)
BrainSlugs83

1
Non sono sicuro del motivo per cui hai due punti interrogativi nel file di destinazioneC:\tmp\file.tx??t
Ploni,



2

È inoltre possibile utilizzare il wgetpacchetto in PowerShell . ; ^) Per aprire, premi il tasto Windows e digita "powershell" o Windows-R e digita "powershell" e premi invio.

Nessuna installazione necessaria.

Una differenza interessante dal convenzionale wget(più a quel link ): Non si può semplicemente utilizzare il maggiore di convogliare in un file. wgetin PowerShell è solo un comodo wrapper per Invoke-WebRequest, ed è necessario utilizzare la sua sintassi per scrivere su un file.

wget https://superuser.com/questions/25538 -OutFile rubySlippers.html

1
-OutFilefatto il lavoro!
Dimitry K

1

Puoi ottenere WGet per Windows qui . In alternativa, è possibile fare clic con il pulsante destro del mouse sul collegamento di download dell'elemento che si desidera scaricare e selezionare Salva con nome. Questo scaricherà il file e non lo aprirà nell'applicazione assegnata.


1

Penso che l'installazione wgettramite Chocolatey sia il modo più semplice.

  1. Installa Chocolatey
  2. Dalla riga di comando, digitare: choco install wget
  3. È quindi possibile utilizzare wgetdalla riga di comando come sui sistemi * nix.

1

Cerca la /downloadfunzione su https://lolbas-project.github.io .

In questo momento ci sono Bitsadmin.exe, Certutil.exe, Esentutl.exe, Expand.exe, Extrac32.exe, Findstr.exe, Hh.exe, Ieexec.exe, Makecab.exe, Replace.exeper Windows Vista, Windows 7, Windows 8, Windows 8.1, Windows 10 e le versioni server equivalenti.



0

Come documentato in questa risposta SU , è possibile utilizzare quanto segue in Powershell:

Import-Module bitstransfer
start-bitstransfer -source http://something/something.ext -destination c:\something.ext

-1

Un'alternativa all'utilizzo di gnuwin32 è unxutils che include wget.


puoi gestirlo con unxutils ma è vecchio, usa una vecchia versione di wget. gnuwin32 è la cosa da usare. non abbastanza conveniente da installare e non così facile da trovare, ma ha anche molto di più di unxutils.
barlop

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.