119 votes

Téléchargement d'un fichier batch Windows à partir d'une URL

J'essaie de télécharger un fichier à partir d'un site web (ex. http://www.example.com/package.zip ) à l'aide d'un fichier batch Windows. J'obtiens un code d'erreur lorsque j'écris la fonction ci-dessous :

xcopy /E /Y "http://www.example.com/package.zip"

Le fichier batch ne semble pas aimer le "/" après le http. Existe-t-il un moyen d'échapper à ces caractères pour qu'ils ne soient pas considérés comme des paramètres de fonction ?

0 votes

Ici : stackoverflow.com/questions/28143160/ J'ai essayé de résumer la façon dont un fichier peut être téléchargé dans Windows en utilisant uniquement des outils natifs sans logiciel tiers.

0 votes

Je sais que c'est un vieux post, mais pour ceux qui arrivent ici à partir de maintenant .... Windows 10 a déjà CURL natif. La commande la plus simple pour ce cas serait la suivante : curl " exemple.com/package.zip " --output package.zip

145voto

sevenforce Points 599

Avec PowerShell 2.0 (Windows 7 préinstallé) vous pouvez utiliser :

(New-Object Net.WebClient).DownloadFile('http://www.example.com/package.zip', 'package.zip')

À partir de PowerShell 3.0 (Windows 8 préinstallé), vous pouvez utiliser Invoke-WebRequest :

Invoke-WebRequest http://www.example.com/package.zip -OutFile package.zip

A partir d'un fichier batch, ils sont appelés :

powershell -Command "(New-Object Net.WebClient).DownloadFile('http://www.example.com/package.zip', 'package.zip')"
powershell -Command "Invoke-WebRequest http://www.example.com/package.zip -OutFile package.zip"

(PowerShell 2.0 est disponible pour une installation sur XP, 3.0 pour Windows 7)

2 votes

Cool ! Mieux que bitsadmin.exe, car il n'est pas déprécié.

0 votes

@sevenforce, Est-ce que la commande Powershell 2.0 fonctionne aussi dans Powershell 3.0, ou est-ce que vous ont pour utiliser cette syntaxe Powershell 3.0 ?

4 votes

@RichSignell : la commande 2.0 fonctionne également en 3.0. Pour la commande 2.0, j'ai remarqué que pour un chemin cible non absolu, le fichier sera enregistré relativement au dossier personnel de l'utilisateur.

102voto

brainwood Points 465

Il existe un composant standard de Windows qui peut réaliser ce que vous essayez de faire : BITS . Il est inclus dans Windows depuis XP et 2000 SP3.

Cours :

bitsadmin.exe /transfer "JobName" http://download.url/here.exe C:\destination\here.exe

Le nom de la tâche est simplement le nom d'affichage de la tâche de téléchargement - définissez-le à quelque chose qui décrit ce que vous faites.

14 votes

Bel outil ! Mais mon win8 dit : "BITSAdmin est déprécié 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 cmdlets PowerShell du BITS."

1 votes

Comme je l'ai déjà mentionné, bitsadmin ne fonctionne pas dans les lots automatiques lancés depuis le planificateur de tâches :(

0 votes

Ce n'est pas dans mon XP sp2 : "'bitsadmin' n'est pas reconnu comme une commande interne ou externe".

29voto

David Grayson Points 22459

C'est peut-être un peu hors sujet, mais vous pouvez assez facilement télécharger un fichier à l'aide de la fonction Powershell . Powershell est livré avec les versions modernes de Windows, de sorte que vous n'avez pas à installer de matériel supplémentaire sur l'ordinateur. J'ai appris à le faire en lisant cette page :

http://teusje.wordpress.com/2011/02/19/download-file-with-powershell/

Le code était :

$webclient = New-Object System.Net.WebClient
$url = "http://www.example.com/file.txt"
$file = "$pwd\file.txt"
$webclient.DownloadFile($url,$file)

2 votes

Si vous effectuez une recherche sur ce blog, vous trouverez d'autres échantillons powershell qui vous faciliteront la tâche avec la nouvelle version 3.0 de PowerShell.

0 votes

Je ne pense pas que vous ayez besoin System en System.Net.WebClient

25voto

LostInTheCode Points 1340

Aux dernières nouvelles, il n'existe pas de commande permettant de se connecter à une URL à partir de la ligne de commande MS. Essayez wget pour Windows :
http://gnuwin32.sourceforge.net/packages/wget.htm

ou URL2File :
http://www.chami.com/free/url2file_wincon.html

Sous Linux, vous pouvez utiliser "wget".

Vous pouvez également essayer VBScript. Ils sont comme des programmes en ligne de commande, mais ce sont des scripts interprétés par l'hôte de scripts wscript.exe. Voici un exemple de téléchargement d'un fichier à l'aide de VBS :
https://serverfault.com/questions/29707/download-file-from-vbscript

2 votes

Vous n'avez pas besoin de wget ou d'une intégration tierce. Le BITS (composant standard de Windows depuis XP) peut le faire avec l'utilitaire bitsadmin à partir de la ligne de commande MS. Réponse postée - bien qu'un peu tard (2 ans de retard ?)

11voto

Kalpesh Soni Points 587
' Create an HTTP object
myURL = "http://www.google.com"
Set objHTTP = CreateObject( "WinHttp.WinHttpRequest.5.1" )

' Download the specified URL
objHTTP.Open "GET", myURL, False
objHTTP.Send
intStatus = objHTTP.Status

If intStatus = 200 Then
  WScript.Echo " " & intStatus & " A OK " +myURL
Else
  WScript.Echo "OOPS" +myURL
End If

puis

C:\>cscript geturl.vbs
Microsoft (R) Windows Script Host Version 5.7
Copyright (C) Microsoft Corporation. All rights reserved.

200 A OK http://www.google.com

ou double-cliquez simplement dessus pour le tester sous Windows

2 votes

Il s'agit uniquement d'un téléchargement en mémoire et pas encore d'une écriture dans un fichier. Consultez cette réponse pour le téléchargement dans un fichier : stackoverflow.com/a/2973344/977804

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X