¿Es posible descargar usando la línea de comando de Windows?


123

Sin usar ninguna utilidad no estándar (incluido Windows), ¿es posible descargar usando la línea de comando de Windows?

La versión preferida es Windows XP, pero también es interesante saber para versiones más recientes.

Para aclarar aún más mi pregunta:

  • Tiene que estar usando HTTP
  • El archivo necesita ser guardado
  • Instalación estándar de Windows limpia, sin herramientas adicionales

Básicamente, dado que todos gritan Wget , quiero una funcionalidad simple de Wget, sin usar Wget.


66
Más ideas en "Si el único navegador en Windows está muerto, ¿cómo conectarse a Internet?" en superuser.com/questions/50427/…
Arjan el

¿Y cuál de las doce versiones de Windows XP sería esa?
Arjan

Digamos que puede ser cualquier versión de Windows XP SP2 y todo lanzado más tarde.
Robert Massa

@arjan Pregunta interesante, pero todavía no hay una respuesta definitiva.
Robert Massa

Debería haber pedido "edición". Como Starter, Home, Professional, Media Center, Tablet, tal vez incluso Embedded (¡buen cambio para herramientas allí, supongo!) ... O las versiones europeas sin Windows Media Player. :-)
Arjan

Respuestas:


51

Puede escribir un VBScript y ejecutarlo desde la línea de comando

Cree un archivo downloadfile.vbse inserte las siguientes líneas de código:

' 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

Ejecútelo desde la línea de comando de la siguiente manera:

cscript.exe downloadfile.vbs 

1
Me pregunto si esto depende de Internet Explorer, pero supongo que esta sería una buena respuesta para "Si el único navegador en Windows está muerto, ¿cómo conectarse a Internet?" en superuser.com/questions/50427/… :-)
Arjan

eso es si se permite el permiso para cscript.exe
hello_there_andy

Puedo confirmar que he probado este script en Windows PE 5.1 y ha funcionado de maravilla. Tengo la intención de usarlo para la implementación fuera de línea, con el fin de verificar la versión de la plataforma en la unidad USB contra un archivo de texto almacenado en el servidor.
Wayfarer

74

Comenzando con Windows 7, creo que hay un método único que aún no se ha mencionado que es fácil:

Sintaxis:

bitsadmin / transfer nombre_trabajo        / descarga / prioridad prioridad    URL   local \ ruta \ archivo

Ejemplo:

bitsadmin / transferencia mydownloadjob / descarga / prioridad normal ^
                  http://example.com/filename.zip C: \ Users \ username \ Downloads \ filename.zip

(Se divide en dos líneas separadas ^para facilitar la lectura (para evitar el desplazamiento)).

Advertencia: como se señaló en los comentarios, el bitsadminmensaje de ayuda comienza diciendo:

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.

... pero otro comentario informó que funciona en Windows 8.


16
es parte de windows7.
akira

3
no funcionó en mi Windows 7 ...
jyz 05 de

3
Esta debería haber sido la respuesta más votada. Sin embargo, bitsadmin está en desuso a favor de Windows Powershell.
lenkite

3
Confirme que trabaja en Win7
kaiser

77
Nota: BITSAdmin está en desuso y no se garantiza que esté disponible en futuras versiones de Windows. Las herramientas administrativas para el servicio BITS ahora son proporcionadas por los cmdlets BITS PowerShell.
Ujjwal Singh

39

Windows 7 incluye PowerShell y no hay prácticamente nada que no pueda hacer con PowerShell.

¿Alternativa nativa a wget en Windows PowerShell?


16
(New-Object Net.WebClient) .DownloadFile ('someurl', 'somepath')
Jason Stangroome

3
Powershell es para Powerrangers ! ¿Cómo kool es eso y por qué diablos no sabía sobre esto? Byebye cmd.
kaiser

17
de cmd.exe: powershell -command "& { iwr http://www.it1.net/it1_logo2.jpg -OutFile logo.jpg }". también funciona desde el indicador de ejecución
Janus Troelsen

1
Sí, no hay nada que no puedas hacer sin PowerShell. Es una verdadera tarpit Turing :)
jcarpenter2

@JanusTroelsen mi versión de PowerShell respondió "El término 'iwr' no se reconoce como el nombre de un cmdlet, ...", pero después de una investigación, esto similar funcionó:powershell -command "$clnt = new-object System.Net.WebClient; $clnt.DownloadFile(\"https://host/name\", \"outpufilename\")"
rogerdpack

25

PowerShell (incluido con Windows 8 e incluido con .NET para versiones anteriores) tiene esta capacidad. El powershellcomando permite ejecutar comandos arbitrarios de PowerShell desde la línea de comandos o un .batarchivo. Por lo tanto, la siguiente línea es lo que se desea:

powershell -command "& { (New-Object Net.WebClient).DownloadFile('http://example.com/', 'c:\somefile') }"

2
Esto no proporciona una respuesta a la pregunta. Para criticar o solicitar una aclaración de un autor, deje un comentario debajo de su publicación; siempre puede comentar sus propias publicaciones y, una vez que tenga suficiente reputación , podrá comentar cualquier publicación .
harrymc

3
@harrymc seguro que es una respuesta. descarga un archivo ¿qué más quieres?
Janus Troelsen

1
(1) Algún texto para explicar qué hace esta frase, (2) Verifique que su respuesta no sea una formulación alternativa a una respuesta anterior, ya que si lo es, a lo sumo debería expresarse como un comentario sobre esa respuesta.
harrymc

¿Qué versión de Windows y PowerShell se requiere para que esto funcione?
Peter Mortensen

2
esto no funciona en Windows Server 2012 FYI, arroja una excepción MethodInvocationException
tocado

17

Encontré una manera de hacerlo, pero realmente, solo instalo Wget .

Puede usar Internet Explorer desde una línea de comando (iexplore.exe) y luego ingresar una URL como argumento. Entonces, ejecuta:

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

Cualquiera que sea el archivo, deberá especificar que no necesita confirmación por adelantado. Lo y he aquí, realizará automáticamente la descarga. Entonces sí, es técnicamente posible, pero Dios mío, hazlo de una manera diferente.


Sé que wget es una forma mucho mejor, es solo una pregunta hipotética;) Su respuesta se acerca bastante, pero aún requiere la intervención del usuario (haciendo clic en "Guardar" o configurando para no mostrar este diálogo)
Robert Massa

3
Como dije, debe anular la selección de la opción para solicitar guardar para ese tipo de archivo. Por ejemplo, descargue un archivo zip, desactive esa solicitud y, en el futuro, cualquier archivo zip al que se acceda desde la línea de comandos se guardará automáticamente.
DHayes

1
+1, aunque no lo he validado, funciona (pero la afirmación final es muy cierta)
Arjan

1
+1 para "querido señor, no lo hagas de esta manera" ... :)
quack quixote

12

Windows Explorer (que no debe confundirse con Internet Explorer) puede descargar archivos a través de HTTP. Simplemente ingrese la URL en la barra de direcciones. O desde la línea de comando, por ejemplo C:\windows\explorer.exe http://somewhere.com/filename.ext,.

Obtiene el indicador de descarga de archivos clásico . A menos que el archivo sea de un tipo que el Explorador de Windows sepa cómo mostrar en línea, (.html, .jpg, .gif), en cuyo caso deberá hacer clic con el botón derecho para guardarlo.

Acabo de probar esto en mi imagen de VMware de una instalación virgen de Windows XP 2002 SP1, y funciona bien.


44
Esto requiere la interacción del usuario. probablemente no es lo que la mayoría de las personas que desean descargar un archivo desde el símbolo del sistema desean
Kip

Hoy en día, depende de su navegador predeterminado. El mío es cromo y se descarga automáticamente a una ubicación conocida, por lo que considero que esta solución es suficiente para mis necesidades. ¡Gracias!
kayleeFrye_onDeck

7

Puede usar (en un bate estándar de Windows):

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

Parece que requiere PowerShell v4 ...

(Gracias a ese comentario y este )


6

Utiliza FTP.

Desde la línea de comando:

ftp ftp.somesite.com
user
password

etc. FTP está incluido en todas las versiones de Windows que recuerdo; probablemente no en 3.1, tal vez no en Windows 95 , pero ciertamente todo después de eso.

@RM: Va a ser difícil si no quieres descargar ninguna otra herramienta. Existe una línea de comandos Wget para Windows y Wget está diseñado para hacer exactamente lo que está pidiendo.


+1 buena respuesta. ftp es bastante universal, siempre que el servidor desde el que intentas descargar sea compatible.
DaveParillo

Gracias, lo siento, no fui más específico, me refería al uso de HTTP.
Robert Massa

1
Esto no funcionará con la mayoría de los servidores FTP, ya que el modo pasivo no es compatible con este cliente ftp de Windows (se requiere NAT entre los modos pasivos).
Peter Mortensen el

@PeterMortensen Tampoco responde de forma remota la pregunta ya que la editó para especificar que estaba buscando la funcionalidad wget. Pero no dejes que eso te impida resucitar una respuesta incorrecta de 7 años solo para agregar algo de pedantería.
Satanicpuppy

4

Use PowerShell así:

  1. Cree un archivo download.ps1:

    param($url, $filename)
    $client = new-object System.Net.WebClient 
    $client.DownloadFile( $url, $filename)
    
  2. Ahora puedes descargar un archivo como este:

    powershell Set-ExecutionPolicy Unrestricted
    powershell -ExecutionPolicy RemoteSigned -File "download.ps1" "http://somewhere.com/filename.ext" "d:\filename.ext"
    

Esto funciona, incluso en Windows XP de 64 bits, PowerShell 2.0.
Peter Mortensen

1

Si instala Telnet, imagino que podría hacer una solicitud HTTP a un servidor para descargar un archivo.

También puede instalar Cygwin y usar wget para descargar un archivo también. Esta es una manera muy fácil de descargar archivos desde la línea de comandos.


2
Estoy bastante seguro 'cygwin' cuenta como una utilidad no estándar ;-)
DaveParillo

Telnet es una opción interesante, ¿hay alguna forma de canalizar la salida a un archivo sin corromperlo? ¿Y podemos canalizar el comando HTTP GET en telnet para hacer la solicitud?
Robert Massa

Instalar telnet? Telnet es como ftp; Viene con ventanas. Sin embargo, no sé sobre la redirección de la salida.
Satanicpuppy

Para XP (como en la pregunta), Telnet está instalado de manera predeterminada, pero escuché que en Vista ya no es así. Pero no, no permite la descarga de archivos, a menos que todo se devuelva en una sola respuesta HTTP, y uno pueda quitar los encabezados y decodificar las cosas en la línea de comandos también. Muy poco probable uno puede controlar eso.
Arjan

1
¿Por qué instalar cygwin solo para usar wget? Hay un binario win32 nativo disponible.
innaM

1

Hay algunas formas en que puede descargar usando la línea de comandos en Windows:

  1. Puedes usar Cygwin .

    Nota: las aplicaciones incluidas no son aplicaciones nativas de Linux. Debe reconstruir su aplicación desde el origen si desea ejecutarla en Windows.

  2. Con telnet es posible realizar una solicitud, pero no verá ningún procesamiento.

  3. Puede escribir scripts bat o VBS.

  4. Escriba su propio programa que pueda ejecutar desde cmd.exe.


1

Puede instalar la aplicación de Linux Wget en Windows. Se puede descargar desde http://gnuwin32.sourceforge.net/packages/wget.htm . Luego puede emitir el comando 'wget (inserturlhere)' o cualquier otra URL en su símbolo del sistema, y ​​le permitirá descargar esa URL / archivo / imagen.


1
Curiosamente, esta versión no siempre es compatible. En mi computadora con Windows 7 no fue porque faltaran bibliotecas. Desearía usar wget sin bibliotecas adicionales la mayor parte del tiempo. users.ugent.be/~bpuype/wget
sinni800


0

En Windows predeterminado, no puede descargar a través de HTTP. Windows es un sistema operativo centrado en la GUI, por lo que carece de muchas de las herramientas de línea de comandos que encontrará en otros sistemas operativos, como wget, que sería el principal candidato.

System.Net.WebClient.DownloadFile(), una función en la WiniNetAPI, puede descargar archivos, pero no estoy seguro de qué tan lejos está llegando al desarrollo real frente a un archivo por lotes.


Entiendo que es posible usar wget, pero mi pregunta establece sin el uso de utilidades de Windows no estándar.
Robert Massa

0

Si tiene instalado Python, aquí hay un ejemplo que obtiene get-pip.py de la web

python -c "import urllib; urllib.urlretrieve ('https://bootstrap.pypa.io/get-pip.py', r'C:\python27\Tools\get-pip.py')"
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.