Question Comment télécharger des fichiers à partir de la ligne de commande dans Windows comme wget ou curl


Comment puis-je télécharger quelque chose directement sur le Web sans Internet Explorer ou Firefox ouvrant Acrobat Reader / Quicktime / MS Word / peu importe?

J'utilise Windows, donc une version Windows de Wget ferait.


283


origine


Il suffit de cliquer avec le bouton droit sur un fichier et d'appuyer sur "Enregistrer la cible sous" ou "Enregistrer le lien sous" ou "Enregistrer sous" (la langue varie en fonction de votre navigateur). - BrainSlugs83
Le fait d'avoir une commande est d'être capable d'écrire un fichier de commandes et de l'exécuter (peut-être programmé en tant que tâche) à tout moment. C'est là que le GUI est insuffisant. - Jbm
Comment téléchargez-vous avec MS Word? - Jaime Hablutzel
@JaimeHablutzel Pourquoi voudriez-vous jamais télécharger quelque chose via MS Word? MS Word n'est pas un terminal. - Braden Best
@SDsolar Ou simplement pour améliorer / améliorer cette réponse au dessous de. - Franklin Yu


Réponses:


Wget pour Windows devrait marcher.

Du Wget Wiki FAQ:

GNU Wget est un utilitaire réseau gratuit permettant de récupérer des fichiers du monde entier   Large Web utilisant HTTP et FTP, les deux Internet les plus utilisés   protocoles Il fonctionne de manière non interactive, permettant ainsi un travail dans le   fond, après s'être déconnecté

De cette section de FAQ, des liens de téléchargement sont suggérés:

Windows binaires

Le lien avec la permission de Jernej Simončič est utilisé à la place.


156



Il y a aussi Winwget cybershade.us/winwget si vous préférez une gui - Col
La version autonome est téléchargeable à partir de ce lien. - Vito Gentile
Plus récent, même à jour (à ce jour) Windows construit, fourni par Jernej Simončič - Gras Double
@VitoShadow lien brisé - The Red Pea
@cixelsyd Lien mis à jour vers une autre source. - clearkimura


Une alternative que j'ai découverte récemment en utilisant PowerShell:

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

Cela fonctionne aussi bien avec les requêtes GET.

Si vous devez spécifier des informations d'identification pour télécharger le fichier, ajoutez la ligne suivante entre:

$client.Credentials =  Get-Credential                

Une invite standard des informations d'identification Windows apparaîtra. Les informations d'identification que vous entrez ici seront utilisées pour télécharger le fichier. Il vous suffit de le faire une fois pour toute l’utilisation de l’objet $ client.


272



Vous pouvez également le faire en une seule ligne: (new-object System.Net.WebClient).DownloadFile('http://www.xyz.net/file.txt','C:\tmp\file.txt') - schellack
@Rob powershell est intégré à Windows ... - nhinkle♦
De Vista, oui. - Arran
@ BrainSlugs83, absolument, mais beaucoup, beaucoup, les gens utilisent toujours XP. C'est simplement quelque chose à garder à l'esprit. - Arran
@ BrainSlugs83, vous sous-estimez le nombre de personnes encore sur les anciens systèmes Windows. Je ne comprends pas le problème, je l'ai souligné uniquement sur Vista. Les gens peuvent choisir de l'ignorer ou de dire "hé merci!", Mais vous ....? Si vous avez un problème, créez un chat et nous pourrons parler. Quelqu'un avec rep (comme vous) devrait réaliser ici n'est pas l'endroit pour cette discussion. - Arran


Si vous avez PowerShell> = 3.0, vous pouvez utiliser Invoke-WebRequest

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

Ou golfé

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

Télécharger un fichier via HTTP dans Windows


64



Cela ne fonctionne pas avec les redirections sur sourceforge (et éventuellement d'autres sites), par opposition à System.Net.WebClient. Cependant, vous pouvez faire Invoke-WebRequest travailler en ajoutant -UserAgent [Microsoft.PowerShell.Commands.PSUserAgent]::FireFox. - Ela782
C'est la bonne solution maintenant, @ CédricBelin a raison. La question et la réponse acceptée sont assez anciennes. - Factor Mystic
Pour l'exécuter depuis un terminal cmd: powershell -command "& {&'iwr' index.html http://superuser.com}" - dario_ramos
Y a-t-il une option pour voir la progression du téléchargement? - Franklin Yu
@FranklinYu la progression montrera si le fichier est assez grand - Steven Penny


Windows a son propre utilitaire de téléchargement en ligne de commande - BITSAdmin:

BITSAdmin est un outil de ligne de commande que vous pouvez utiliser pour créer un téléchargement.   ou télécharger des travaux et suivre leurs progrès.

MODIFIER: 26.01.15 - Voici mon aperçu de la façon dont un fichier peut être téléchargé sur des fenêtres sans outils externes 

Et un exemple complet de bitsadmin:

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

modifier : 15.05.2018 - s'est avéré que possible de télécharger un fichier avec certutil aussi:

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

Certutil n'est pas installé par défaut sur XP / Win2003 mais est disponible sur les nouvelles versions de Windows. Pour XP / 2003, vous aurez besoin de Pack d'outils d'administration pour Windows Server 2003


39



Intéressant. C'est un logiciel maladroit comparé à wget. - Matt H
Notez qu'il n'est pas fourni avec Windows XP, et peut-être pas avec d'autres versions non plus. - Ian Dunn
Mise à jour: BITSAdmin est obsolète et sa disponibilité n'est pas garantie dans les futures versions de Windows. Les outils d'administration du service BITS sont désormais fournis par les applets de commande BITS PowerShell. - nulldev07
@MattH: parce qu'il n'est pas supposé être wget en premier lieu? - voir en.wikipedia.org/wiki/Background_Intelligent_Transfer_Service - peterchen
Impossible d'ajouter un fichier - 0x80070057 - Tomáš Zato


Enregistrez le texte suivant en tant que wget.js et appelez simplement

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

Ceci est le 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



Dans quelle langue ce script se trouve-t-il utile pour ma tâche en cours? Je voudrais trouver plus de documentation de référence. Ne ressemble pas vraiment à vb - G-.
Utile pour des fichiers uniques. A besoin d'améliorations pour le téléchargement récursif et https. - opticyclic
@G-. Je suis en retard à la fête, mais c'est du JavaScript. - prooffreader
J'ai essayé de le faire pour database.clamav.net/daily.cvd, mais il n'a téléchargé que 88 Ko de 44 Mo :( - kokbira


J'ai fait un rapide fichier myGet.bat qui appelle la méthode PowerShell décrite ci-dessus.

@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

J'ai emprunté du code de URL d'analyse pour le nom de fichier avec espace.


16



pourquoi la descente? Cela me semble correct et répond directement à la question. Oui, c'est maladroit et pourrait utiliser des améliorations, comme échapper à des esperluettes (&) dans l'URL, mais cela fonctionne comme tel. - matt wilkie


Il existe un fichier cURL natif pour Windows disponible ici. Il existe de nombreuses variantes disponibles avec et sans support SSL.

Vous n'avez pas besoin du bagage supplémentaire de Cygwin et les goûts, juste un petit fichier EXE.


Il est également important de savoir qu'il y a les deux wget et curl alias intégrés dans toutes les versions modernes de Windows Powershell. Ils sont équivalents.

Aucun fichier ou téléchargement supplémentaire n'est requis pour obtenir wgetfonctionnalité:

Utilisation de Curl In Powershell (Le geek sociable)

Extrait:

Vous pouvez taper une commande cURL comme celle qui télécharge un fichier depuis un   Référentiel GitHub.

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

et il semblera que cela fonctionne, mais ce qu'il est en train de faire est juste   utiliser cURL comme un alias. Dans l'exemple ci-dessus, ce qui va arriver est   que vous obtiendrez simplement les en-têtes au lieu du fichier lui-même.

Les alias de PowerShell vous permettent de créer des raccourcis pour des commandes plus longues, ce qui vous évite de les taper tout le temps.

Si vous tapez la commande Get-Alias, vous obtiendrez une liste de tous les alias utilisés dans PowerShell. Comme vous pouvez le voir, la commande curl appelle simplement la commande Invoke-WebRequest. Ils sont similaires mais pas les mêmes, c'est pourquoi la demande ci-dessus ne fonctionne pas pour nous.

enter image description here

Pour que cela fonctionne correctement dans PowerShell, le plus simple est d'utiliser des variables et -OutFile argument comme montré ici:

enter image description here

(nom du fichier coupé dans l'image "https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/mongodb-on-ubuntu/azuredeploy.json")

Cette syntaxe téléchargera le contenu complet du fichier cible azuredeploy.json au fichier local newfile.json


Le principal avantage est qu'il est intégré à Powershell lui-même. Ce code s'exécute directement sans téléchargement, ou toute autre création de fichier supplémentaire est requise pour fonctionner sur toute version moderne de Windows.


15



Cela se fait directement sur une ligne, mais la ligne devient assez longue et n'est pas aussi lisible immédiatement. - SDsolar
La meilleure façon, merci - Konstantin Chernov


Je cherchais le même, et comme je n'avais aucun privilège d'installer l'un des paquets ci-dessus, je suis allé pour une petite solution de contournement (pour télécharger 30 + fichiers):

  • J'ai créé un fichier batch
  • Liste de tous les fichiers
  • Mettre firefox.exe au début de chaque ligne
  • Je suis allé au répertoire firefox dans Program Files
  • Je l'ai fait.

8