Descargar un archivo a través de HTTP desde un script en Windows

19

Quiero una forma de descargar un archivo a través de HTTP dada su URL (similar a cómo funciona wget). He visto las respuestas a esta pregunta , pero tengo dos cambios en los requisitos:

  • Me gustaría que se ejecute en Windows 7 o posterior (aunque si funciona en Windows XP, es una ventaja).
  • Necesito poder hacer esto en una máquina estándar sin nada más que el script, que debe ser texto que se pueda ingresar fácilmente en un teclado o copiar / pegar.
  • Cuanto más corto, mejor.

Entonces, esencialmente, me gustaría una secuencia de comandos .cmd (batch), VBScript o PowerShell que pueda realizar la descarga. Podría usar COM o invocar Internet Explorer, pero debe ejecutarse sin ninguna entrada y debe comportarse bien cuando se invoca sin una pantalla (como a través de una sesión Telnet ).

Jason R. Coombs
fuente
DLOAD v1.0 una herramienta de línea de comandos win32 como wget superuser.com/a/833445/384998
seizu
No es un duplicado porque esta pregunta busca específicamente algo que se ejecute en una máquina estándar (sin software adicional, como wget para Windows).
Jason R. Coombs
@ JasonR.Coombs La respuesta aceptada es la misma que una de las respuestas de esa pregunta, por lo que el futuro lector no obtendrá nada más.
Franklin Yu
Estoy de acuerdo; en este punto, la pregunta más general reemplaza a esta.
Jason R. Coombs

Respuestas:

16

Si tiene PowerShell> = 3.0, puede usar Invoke-WebRequest :

Invoke-WebRequest -OutFile su.htm -Uri superuser.com

O golf:

iwr -outf su.htm superuser.com
Steven Penny
fuente
2
One-liner del indicador de cmd regular:powershell -command "iwr -outf su.htm superuser.com"
valiano
14

Yo usaría BITS ( primer ):

Background Intelligent Transfer Service (BITS) is a component of modern
Microsoft Windows operating systems that facilitates prioritized,
throttled, and asynchronous transfer of files between machines using
idle network bandwidth.

A partir de Windows 7, Microsoft recomienda usar los cmdlets de PowerShell para BITS.

% import-module bitstransfer
% Start-BitsTransfer http://path/to/file C:\Path\for\local\file

También puede usar BITS a través de COM , consulte aquí un ejemplo de VBScript . Y hay ' bitsadmin ', una herramienta de línea de comandos para controlar las descargas:

BITSAdmin is a command-line tool that you can use to create download or
upload jobs and monitor their progress.

En Windows 7 se bitsadmin.exeafirma que es una herramienta obsoleta. Sin embargo:

% bitsadmin.exe /transfer "NAME" http://path/to/file C:\Path\for\local\file
akira
fuente
2
Parece ahora que bitsadmin está en desuso y es posible que no se incluya en futuras versiones de Windows.
Jason R. Coombs
@ JasonR.Coombs: enlace? ¿referencia?
akira
2
technet.microsoft.com/en-us/magazine/ff382721.aspx ... entonces, en lugar de "bitadmin.exe" uno solo usa bits-cmdlets.
akira
1
gracias por eso. Todo lo que tenía que seguir era que bitsadmin me decía que estaba en desuso cuando lo ejecuté.
Jason R. Coombs
Tenga en cuenta que fuera de ruta debe ser completo y no relativa (sombrero de punta superuser.com/questions/365755/... )
Wilkie mate
7

Pruebe la clase de cliente web . Hay una secuencia de comandos de PowerShell de muestra en la parte inferior de esta página:

$c = new-object system.net.WebClient
$r = new-object system.io.StreamReader $c.OpenRead("http://superuser.com")
echo $r.ReadToEnd()
Charles Gargent
fuente
2
Esto es de ayuda. Descubrí que el WebClient también tiene un método DownloadFile, que descargará el contenido directamente a un archivo. Gracias.
Jason R. Coombs
3

Copie y pegue las siguientes seis líneas (o solo las últimas cuatro líneas) en un archivo de texto. Luego cámbiele el nombre a vget.vbs.

'cscript vget.vbs >FILE.TXT
'Run this vbscript at command line. Use above syntax to download/create FILE.TXT
Set oX = CreateObject("Microsoft.XmlHTTP")
oX.Open "GET", "http://www.exampleURL.com/FILE.TXT", False
oX.Send ""
WScript.Echo oX.responseText

Obviamente, necesita personalizar tres cosas en este script para que funcione para usted.

  1. La parte que dice " http://www.exampleURL.com/FILE.TXT ". Deberá sustituir la URL correcta por el archivo que desea descargar.
  2. El comando que ejecutará en la línea de comando para ejecutar este script; necesitará especificar el nombre correcto para el script vget.vbs, si así es como lo llamó.
  3. Y el nombre al FILE.TXTque desea que la salida sea dirigida por una línea de comando por lotes de DOS .

Solo he intentado usar esto para descargar un archivo de texto ASCII sin procesar (un script cmd más potente) desde mi cuenta de Dropbox , por lo que no sé si funcionará para archivos EXE, etc .; o de otros servidores web.

Si prescinde de las dos primeras líneas de comentarios, solo tiene cuatro líneas. Si conoce bien VBScript , incluso podría llevar este código en su cabeza y escribirlo en la línea de comando según sea necesario. Sólo contiene cinco componentes de comandos de teclado: CreateObject, .Open, .Send, WScript.Echoy .responseText.

ozidroid
fuente