Est-il possible de télécharger en utilisant la ligne de commande Windows?

123

Sans utiliser d'utilitaires non standard (Windows inclus), est-il possible de télécharger à l'aide de la ligne de commande Windows?

La version préférée est Windows XP, mais il est également intéressant de connaître les versions plus récentes.

Pour clarifier davantage ma question:

  • Il doit utiliser HTTP
  • Le fichier doit être enregistré
  • Installation standard de Windows propre, sans outils supplémentaires

Donc, fondamentalement, puisque tout le monde crie Wget , je veux une fonctionnalité Wget simple, sans utiliser Wget.

Robert Massa
la source
6
Plus d'idées dans "Si le seul navigateur de Windows est mort, comment se connecter à Internet?" sur superuser.com/questions/50427/…
Arjan
Et de quelles versions de Windows XP s'agit-il?
Arjan
Disons qu'il peut s'agir de n'importe quelle version de Windows XP SP2 et de toutes les versions ultérieures.
Robert Massa
@arjan Question intéressante, mais il n'y a toujours pas de réponse définitive.
Robert Massa
J'aurais dû demander "édition". Comme Starter, Home, Professional, Media Center, Tablet, peut-être même Embedded (bon changement pour les outils là-bas, je suppose!) ... Ou les versions européennes sans Windows Media Player. :-)
Arjan

Réponses:

51

Vous pouvez écrire un script VBScript et l'exécuter à partir de la ligne de commande.

Créez un fichier downloadfile.vbset insérez les lignes de code suivantes:

' 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

Exécutez-le à partir de la ligne de commande comme suit:

cscript.exe downloadfile.vbs 
phuclv
la source
1
Je me demande si cela s’appuie sur Internet Explorer, mais j’imagine que ce serait une bonne réponse: "Si le seul navigateur de Windows est mort, comment se connecter à Internet?" sur superuser.com/questions/50427/… :-)
Arjan
c'est si l'autorisation de cscript.exe est autorisée
hello_there_andy
Je peux confirmer que j'ai testé ce script dans Windows PE 5.1 et qu'il a fonctionné à merveille. J'ai l'intention de l'utiliser pour un déploiement hors ligne, afin de vérifier la version de la plate-forme de la clé USB par rapport à un fichier texte stocké sur le serveur.
Voyageur
74

À partir de Windows 7, je pense qu’une méthode simple, qui n’a pas encore été mentionnée, est simple:

Syntaxe:

bitsadmin / transfer nom_travail        / download / priorité    URL de   priorité local \ chemin \ fichier

Exemple:

bitsadmin / transfer mydownloadjob / download / priorité normale ^
                  http://example.com/nom_fichier.zip C: \ Utilisateurs \ nom_utilisateur \ Téléchargements \ nom_fichier.zip

(Divisé en deux lignes séparées avec ^pour la lisibilité (pour éviter le défilement).)

Avertissement: comme indiqué dans les commentaires, le bitsadminmessage d’aide commence par:

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.

... mais un autre commentaire a signalé que cela fonctionne sur Windows 8.

décalage dans le temps
la source
16
cela fait partie de windows7.
Akira
3
n'a pas fonctionné sur mes fenêtres 7 ...
jyz
3
Cela aurait dû être la réponse la plus votée. bitsadmin est cependant déconseillé au profit de Windows PowerShell.
Lenkite
3
Confirmez votre travail sur Win7
kaiser
7
Remarque: BITSAdmin est obsolète et sa disponibilité dans les versions futures de Windows n'est pas garantie. Les outils d'administration du service BITS sont désormais fournis par les applets de commande BITS PowerShell.
Ujjwal Singh
39

Windows 7 inclut PowerShell et il n’ya pratiquement rien que vous ne puissiez faire avec PowerShell.

Alternative native à wget dans Windows PowerShell?

utilisateur15130
la source
16
(New-Object Net.WebClient) .DownloadFile ('someurl', 'somepath')
Jason Stangroome
3
Powershell est pour Powerrangers ! C'est comment kool et pourquoi diable est-ce que je ne savais pas à ce sujet? Au revoir cmd.
Kaiser
17
de cmd.exe: powershell -command "& { iwr http://www.it1.net/it1_logo2.jpg -OutFile logo.jpg }". fonctionne également à partir de l'invite d'exécution
Janus Troelsen
1
Oui, rien ne peut être fait sans PowerShell. C'est un véritable tarpit turing :)
jcarpenter2
@JanusTroelsen, ma version de PowerShell a répondu "Le terme 'iwr' n'est pas reconnu en tant que nom d'une applet de commande, ...", mais après une enquête, ce travail similaire a fonctionné:powershell -command "$clnt = new-object System.Net.WebClient; $clnt.DownloadFile(\"https://host/name\", \"outpufilename\")"
rogerdpack
25

PowerShell (inclus avec Windows 8 et .NET pour les versions précédentes) offre cette fonctionnalité. La powershellcommande permet d'exécuter des commandes PowerShell arbitraires à partir de la ligne de commande ou d'un .batfichier. Ainsi, la ligne suivante est ce qui est recherché:

powershell -command "& { (New-Object Net.WebClient).DownloadFile('http://example.com/', 'c:\somefile') }"
Nik
la source
2
Cela ne fournit pas de réponse à la question. Pour critiquer ou demander des éclaircissements à un auteur, laissez un commentaire en dessous de son message - vous pouvez toujours commenter vos propres messages, et une fois que vous avez suffisamment de réputation, vous pourrez commenter n'importe quel message .
harrymc
3
@ charrymc sûr que c'est une réponse. il télécharge un fichier. Que veux-tu de plus?
Janus Troelsen
1
(1) Un texte expliquant ce que signifie cette ligne, (2) Vérifiez que votre réponse ne constitue pas une formulation alternative à une réponse précédente, car si tel est le cas, elle doit tout au plus être exprimée sous forme de commentaire sur cette réponse.
harrymc
Quelle version de Windows et de PowerShell est requise pour que cela fonctionne?
Peter Mortensen
2
cela ne fonctionne pas dans Windows Server 2012 FYI, il lève une MethodInvocationException
knocte
17

J'ai trouvé un moyen de le faire, mais vraiment, installez simplement Wget .

Vous pouvez utiliser Internet Explorer à partir d'une ligne de commande (iexplore.exe), puis entrer une URL en tant qu'argument. Alors, lancez:

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

Quel que soit le fichier, vous devrez spécifier qu'il n'a pas besoin de confirmation à l'avance. Et voilà, il effectuera automatiquement le téléchargement. Donc oui, c'est techniquement possible, mais bon seigneur le fait d'une manière différente.

DHayes
la source
Je sais que wget est une bien meilleure façon, il est juste une question hypothétique;) Votre réponse est assez proche, mais nécessite toujours l' intervention de l' utilisateur ( en cliquant sur « Enregistrer », ou la configuration de ne pas afficher cette boîte de dialogue)
Robert Massa
3
Comme je l'ai dit, vous devez désélectionner l'option d'inviter à enregistrer pour ce type de fichier. Par exemple, téléchargez un fichier zip, désactivez cette invite, puis, à l'avenir, tous les fichiers zip auxquels vous aurez accès à partir de la ligne de commande seront automatiquement enregistrés.
DHayes
1
+1, bien que je n'aie pas validé le résultat (mais la déclaration finale est très vraie)
Arjan
1
+1 pour "cher seigneur, ne faites pas ça comme ça" ... :)
Quack quixote
12

Windows Explorer (à ne pas confondre avec Internet Explorer) peut télécharger des fichiers via HTTP. Il suffit d'entrer l'URL dans la barre d'adresse. Ou à partir de la ligne de commande, par exemple C:\windows\explorer.exe http://somewhere.com/filename.ext,.

Vous obtenez l' invite classique de téléchargement de fichier . À moins que le fichier ne soit un type que l'explorateur Windows sait comment afficher en ligne (.html, .jpg, .gif), vous devrez alors cliquer avec le bouton droit de la souris pour le sauvegarder.

Je viens de tester cela sur mon image VMware d’une installation vierge de Windows XP 2002 SP1, et cela fonctionne bien.

Chris Noé
la source
4
cela nécessite une interaction de l'utilisateur. probablement pas ce que la plupart des gens qui veulent télécharger un fichier à partir de l'invite de commande veulent
Kip
De nos jours, cela dépend de votre navigateur par défaut. Le mien est chrome, et il se télécharge automatiquement vers un emplacement connu. Je considère donc que cette solution est suffisante pour répondre à mes besoins. Merci!
kayleeFrye_onDeck
7

Vous pouvez utiliser (dans une batte Windows standard):

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

Il semble nécessiter PowerShell v4 ...

(Merci à ce commentaire et celui-ci )

Anthony O.
la source
6

Utilisez FTP.

A partir de la ligne de commande:

ftp ftp.somesite.com
user
password

etc. FTP est inclus dans toutes les versions de Windows dont je me souviens. probablement pas en 3.1, peut-être pas dans Windows 95 , mais certainement tout après.

@RM: Cela va être difficile si vous ne voulez pas télécharger d'autres outils. Il existe une ligne de commande Wget pour Windows et Wget est conçu pour faire exactement ce que vous demandez.

Satanicpuppy
la source
+1 bonne réponse. Le ftp est assez universel, tant que le serveur que vous essayez de télécharger depuis le supporte.
DaveParillo
Merci, désolé, je n'étais pas plus spécifique, je voulais dire utiliser HTTP.
Robert Massa
1
Cela ne fonctionnera pas avec la plupart des serveurs FTP car ce client ftp Windows ne prend pas en charge le mode passif (des NAT entre le mode passif sont nécessaires).
Peter Mortensen
@PeterMortensen Il ne répond pas non plus à distance à la question puisqu'il l'a modifiée pour spécifier qu'il recherchait la fonctionnalité wget. Mais ne laissez pas cela vous empêcher de ressusciter une mauvaise réponse de 7 ans juste pour ajouter du pédantisme.
Satanicpuppy
4

Utilisez PowerShell comme ceci:

  1. Créez un fichier download.ps1:

    param($url, $filename)
    $client = new-object System.Net.WebClient 
    $client.DownloadFile( $url, $filename)
    
  2. Vous pouvez maintenant télécharger un fichier comme celui-ci:

    powershell Set-ExecutionPolicy Unrestricted
    powershell -ExecutionPolicy RemoteSigned -File "download.ps1" "http://somewhere.com/filename.ext" "d:\filename.ext"
    
Thomas Jespersen
la source
Cela fonctionne, même sous Windows XP 64 bits, PowerShell 2.0.
Peter Mortensen
1

Si vous installez Telnet, j'imagine que vous pouvez envoyer une requête HTTP à un serveur pour télécharger un fichier.

Vous pouvez également installer Cygwin et utiliser wget pour télécharger un fichier. C'est un moyen très simple de télécharger des fichiers à partir de la ligne de commande.

EvilChookie
la source
2
Je suis presque sûr que «cygwin» compte pour un utilitaire non standard ;-)
DaveParillo Le
Telnet est une option intéressante. Existe-t-il un moyen de diriger la sortie vers un fichier sans la corrompre? Et pouvons-nous diriger la commande HTTP GET vers telnet pour effectuer la demande?
Robert Massa
Installer telnet? Telnet est comme ftp; il vient avec des fenêtres. Je ne sais pas sur la redirection de la sortie cependant.
Satanicpuppy
Pour XP (comme dans la question), telnet est installé par défaut, mais j'ai entendu dire que sur Vista, ce n'est plus le cas? Mais non, cela ne permet pas le téléchargement de fichiers, à moins que tout ne soit renvoyé dans une seule réponse HTTP, et on peut supprimer les en-têtes et décoder les éléments sur la ligne de commande. Assez improbable, on peut contrôler cela.
Arjan
1
Pourquoi installer cygwin juste pour utiliser wget? Il y a un binaire Win32 natif disponible.
InnaM
1

Il existe plusieurs méthodes de téléchargement à l'aide de la ligne de commande de Windows:

  1. Vous pouvez utiliser Cygwin .

    Remarque: les applications incluses ne sont pas des applications natives Linux. Vous devez reconstruire votre application à partir des sources si vous souhaitez exécuter Windows.

  2. En utilisant telnet, il est possible de faire une demande mais vous ne verrez aucun traitement.

  3. Vous pouvez écrire des scripts bat ou VBS.

  4. Ecrivez votre propre programme que vous pouvez exécuter à partir de cmd.exe.

Jésus
la source
1

Vous pouvez installer l'application Linux Wget sous Windows. Il peut être téléchargé à partir de http://gnuwin32.sourceforge.net/packages/wget.htm . Vous pouvez ensuite émettre la commande 'wget (inserturlhere)' ou toute autre URL dans votre invite de commande, ce qui vous permettra de télécharger cette URL / ce fichier / cette image.

Peter Mortensen
la source
1
Étrangement cette version n'est pas toujours compatible. Sur mon ordinateur Windows 7, ce n'était pas parce que des bibliothèques étaient manquantes. Vous voudriez utiliser wget sans aucune bibliothèque supplémentaire la plupart du temps. utilisateurs.ugent.be/~bpuype/wget
sinni800
0

Par défaut, Windows, vous ne pouvez pas télécharger via HTTP. Windows est un système d’exploitation centré sur l’interface graphique, de sorte qu’il manque beaucoup des outils de ligne de commande que vous trouverez dans les autres systèmes d’exploitation, comme par exemple wget, qui serait le candidat idéal.

System.Net.WebClient.DownloadFile(), une fonction de l’ WiniNetAPI, permet de télécharger des fichiers, mais je ne suis pas sûr de l’amélioration du développement par rapport à un fichier de commandes.

Andrew Scagnelli
la source
Je comprends que c’est possible avec wget, mais ma question dit sans utiliser d’utilitaires Windows non standard.
Robert Massa
0

Si vous avez installé python, voici un exemple qui récupère le get-pip.py sur le Web

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