Cómo descargar archivos desde la línea de comandos en Windows como wget o curl


352

¿Cómo puedo descargar algo de la web directamente sin que Internet Explorer o Firefox abran Acrobat Reader / Quicktime / MS Word / lo que sea?

Estoy usando Windows, por lo que una versión de Windows de Wget funcionaría .


Simplemente haga clic derecho en un archivo y presione "Guardar destino como" o "Guardar enlace como" o "Guardar como" (el idioma varía según su navegador) funcionará.
BrainSlugs83

25
El punto de tener un comando es poder escribir un archivo por lotes y ejecutarlo (tal vez programado como una tarea) en cualquier momento que desee. Ahí es donde la GUI se queda corta.
Jbm

44
¿Cómo se descarga con MS Word?
Jaime Hablutzel

55
@JaimeHablutzel ¿Por qué querrías descargar algo a través de MS Word? MS Word no es una terminal.
Braden Best

1
@SDsolar O simplemente vota / mejora esta respuesta a continuación.
Franklin Yu

Respuestas:


181

Wget para Windows debería funcionar.

De las preguntas frecuentes de Wget Wiki :

GNU Wget es una utilidad de red gratuita para recuperar archivos de la World Wide Web utilizando HTTP y FTP, los dos protocolos de Internet más utilizados. Funciona de forma no interactiva, lo que permite trabajar en segundo plano, después de haber cerrado sesión.

Desde esta sección de preguntas frecuentes , se sugieren enlaces de descarga:

Windows binarios

En su lugar, se utiliza el enlace con cortesía de Jernej Simončič.


99
También hay Winwget cybershade.us/winwget si prefiere una interfaz gráfica de usuario
Col

13
La versión independiente se puede descargar desde este enlace .
Vito Gentile

55
Compilaciones de Windows más recientes, incluso actualizadas (hasta hoy) , proporcionadas por Jernej Simončič
Gras Double

1
@cixelsyd Enlace actualizado a una fuente alternativa.
clearkimura

1
eternallybored.org/misc/wget/ está marcado por el antivirus de empresa en mi sistema. Negro de carbón / Bit 9. Probablemente falso positivo. Pero sourceforge uno corre. No es compatible con sslv3.
TamusJRoyce

312

Una alternativa que descubrí recientemente, usando PowerShell:

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

Funciona también con consultas GET.

Si necesita especificar credenciales para descargar el archivo, agregue la siguiente línea en el medio:

$client.Credentials =  Get-Credential                

Aparecerá un mensaje de credenciales estándar de Windows. Las credenciales que ingrese allí se utilizarán para descargar el archivo. Solo necesita hacer esto una vez durante todo el tiempo que usará el objeto $ client.


9191
También puede hacerlo en una línea:(new-object System.Net.WebClient).DownloadFile('http://www.xyz.net/file.txt','C:\tmp\file.txt')
schellack

16
@Rob powershell está integrado en Windows ...
nhinkle

99
Desde Vista arriba, sí.
Arran

3
@ BrainSlugs83, absolutamente, pero muchas, muchas personas todavía usan XP. Es simplemente algo a tener en cuenta.
Arran

44
@ BrainSlugs83, subestimas la cantidad de personas que todavía están en sistemas Windows más antiguos. No entiendo el problema, señalé que solo está en Vista hacia arriba. La gente puede elegir ignorarlo o decir "¡Hola, gracias!", Pero tú ... Si tiene un problema, cree un chat y podemos hablar. Alguien con representante (como usted) debería darse cuenta de que aquí no es el lugar para esta discusión.
Arran

83

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

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

O golf

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

Descargar un archivo a través de HTTP en Windows


Esto no funciona con redireccionamientos en sourceforge (y posiblemente otros sitios), a diferencia de System.Net.WebClient. Sin embargo, puede hacer el Invoke-WebRequesttrabajo agregando -UserAgent [Microsoft.PowerShell.Commands.PSUserAgent]::FireFox.
Ela782

¿Hay alguna opción para ver el progreso de la descarga?
Franklin Yu

@FranklinYu el progreso mostrará si el archivo es lo suficientemente grande
Steven Penny

¿Existe una opción para no especificar un archivo externo, pero aún así guardar (como wgeto curl -O, curl --remote-nameo curl -J?)
Tomasz Gandor

60

Windows tiene su propia utilidad de descarga de línea de comandos - BITSAdmin :

BITSAdmin es una herramienta de línea de comandos que puede usar para crear trabajos de descarga o carga y monitorear su progreso.

EDITAR : 26.01.15 - Aquí está mi descripción general de cómo se puede descargar un archivo en Windows sin herramientas externas

Y un ejemplo completo de bitsadmin:

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

Editar : 15.05.2018 - resultó que también es posible descargar un archivo con certutil :

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

Certutil no está instalado de forma predeterminada en XP / Win2003 pero está disponible en las versiones más nuevas de Windows. Para XP / 2003 necesitará el Paquete de herramientas de administración para Windows Server 2003


77
Interesante. Esa es una pieza de software torpe en comparación con wget.
Matt H

2
Tenga en cuenta que no se incluye con Windows XP, y quizás tampoco con otras versiones.
Ian Dunn

12
Actualización: 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.
nulldev07

2
@MattH: ¿porque se supone que debe ser wget en primer lugar? - ver en.wikipedia.org/wiki/Background_Intelligent_Transfer_Service
peterchen

44
No se puede agregar el archivo - 0x80070057
Tomáš Zato

32

Guarde el siguiente texto como wget.jsy simplemente llame

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

Este es el código:

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");
*/

¿En qué idioma está este script? Parece útil para mi tarea actual. Me gustaría encontrar más documentación de referencia. No se parece mucho a vb
G-.

1
Útil para archivos individuales. Necesita mejoras para descargas recursivas y https.
opticyclic

44
@SOL-. Llego tarde a la fiesta, pero eso es JavaScript.
Prooffreader

Traté de hacer eso para database.clamav.net/daily.cvd , pero descargó solo 88kB de 44MB :(
kokbira

22

Hay un cURL nativo para Windows disponible aquí . Hay muchos sabores disponibles, con y sin soporte SSL.

No necesita el equipaje extra de Cygwin y sus gustos, solo un pequeño archivo EXE.


También es importante saber que hay ambos wgety curlalias integrados en todas las versiones modernas de Windows Powershell. Son equivalentes

No se requieren archivos ni descargas adicionales para obtener la wgetfuncionalidad:

Usando Curl In Powershell (El Sociable Geek)

Extracto:

Puede escribir un comando cURL como uno que descarga un archivo desde un repositorio de GitHub.

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

y parecerá que funciona, pero lo que realmente está haciendo es usar cURL como un alias. En el caso anterior, lo que sucederá es que solo obtendrá los encabezados en lugar del archivo en sí.

Los alias en PowerShell le permiten crear accesos directos para comandos más largos para que no tenga que escribirlos todo el tiempo.

Si escribe el comando Get-Alias, le dará una lista de todos los Alias ​​que se usan en PowerShell. Como puede ver, el comando curl solo llama al comando Invoke-WebRequest. Son similares pero no iguales, por lo que la solicitud anterior no funciona para nosotros.

ingrese la descripción de la imagen aquí

Para que esto funcione correctamente en PowerShell, la forma más fácil es usar variables y el -OutFileargumento como se muestra aquí:

ingrese la descripción de la imagen aquí

(nombre de archivo cortado en la imagen " https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/mongodb-on-ubuntu/azuredeploy.json ")

Esta sintaxis descargará el contenido completo del archivo de destino al archivo azuredeploy.jsonlocalnewfile.json


La principal ventaja es que está integrado en Powershell, por lo que este código se ejecutará directamente sin descargas o se requieren otras creaciones de archivos adicionales para que funcione en cualquier versión moderna de Windows.


Esto se hace directamente en una línea, pero la línea se hace bastante larga y no es tan fácil de leer de un vistazo.
SDsolar

22

Hice un archivo myGet.bat rápido que llama al método PowerShell descrito anteriormente.

@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

Tomé prestado algún código de Parsing URL para el nombre de archivo con espacio .


1
¿Por qué el voto negativo? Esto me parece bien y es una respuesta directa a la pregunta. Sí, es torpe y podría mejorar, como escapar de los símbolos (&) en la URL, pero funciona como está.
Matt Wilkie

¿No sería más fácil escribir un script de PowerShell?
Sábado

1
powershell.exe -Command "Invoke-WebRequest -OutFile ./file-name https://location/file-name"<- Uso simple de PowerShell de una línea en la ubicación de codificación del archivo de script y el nombre del archivo.
James Eby

8

Estaba buscando lo mismo, y como no tenía el privilegio de instalar ninguno de los paquetes anteriores, busqué una pequeña solución (para descargar más de 30 archivos):

  • Creé un archivo por lotes
  • Listado de todos los archivos
  • Poner firefox.exeal principio de cada línea
  • Fui al directorio de Firefox en Program Files
  • Lo corrió.

4

Si PowerShell es una opción, esa es la ruta preferida, ya que (potencialmente) no tendrá que instalar nada adicional:

(new-object System.Net.WebClient).DownloadFile('http://www.xyz.net/file.txt', 'C:\tmp\file.tx??t')

De lo contrario, Wget para Windows, como otros han señalado, es definitivamente la segunda mejor opción. Como se publicó en otra respuesta, parece que puede descargar Wget solo , o puede tomarlo como parte de Cygwin o MSys .

Si por alguna razón, te encuentras atrapado en un salto de tiempo, usando una máquina que no tiene PowerShell y no tienes acceso a un navegador web que funcione (es decir, Internet Explorer es el único navegador en el sistema, y ​​su configuración están corruptos) y su archivo está en un sitio FTP (en lugar de HTTP):

start->run "FTP", press "OK".

Si la memoria funciona, ha estado allí desde Windows 98, y puedo confirmar que todavía está allí en Windows 8 RTM (es posible que deba ingresar appwiz.cply agregar / quitar funciones para obtenerla). Esta utilidad puede descargar y cargar archivos a / desde sitios FTP en la web. También se puede usar en scripts para automatizar cualquiera de las operaciones.

Esta herramienta incorporada me ha salvado la vida en el pasado, especialmente en los días de ftp.cdrom.com: descargué Firefox de esa manera una vez, en una máquina completamente rota que solo tenía un acceso telefónico a Internet conexión (cuando el tamaño máximo de paquete de sneakernet todavía era 1,44 MB, y Firefox todavía se llamaba "Netscape" / me hace trollface ).

Un par de consejos: es su propio procesador de comandos y tiene su propia sintaxis. Intenta escribir "ayuda". Todos los sitios FTP requieren un nombre de usuario y contraseña; pero si permiten usuarios "anónimos", el nombre de usuario es "anónimo" y la contraseña es su dirección de correo electrónico (puede inventar una si no desea ser rastreado, pero generalmente hay algún tipo de lógica para asegurarse de que sea Una dirección de correo electrónico válida).


¡+1 por pensar en la línea de comando ftp! Sin embargo, wget y powershell se mencionaron mucho antes de unirse a la fiesta, así que -1 allí. : - /
matt wilkie

Las otras respuestas de PowerShell que vi eran todas de líneas múltiples y / o tenían algo de olor a código: este es un breve y simple revestimiento para descargar un archivo. - También quería proporcionar una respuesta que cubriera todas las bases. :-)
BrainSlugs83

1
No estoy seguro de por qué tiene dos signos de interrogación en el archivo de destinoC:\tmp\file.tx??t
Ploni


3

También puede usar el wgetpaquete en PowerShell . ; ^) Para abrir, presione la tecla de Windows y escriba "powershell" o Windows-R y escriba "powershell" y presione regresar.

No es necesaria la instalación.

Una diferencia interesante de la convencional wget(más en ese enlace ): no puede simplemente usar el mayor que para canalizar a un archivo. wgeten PowerShell es solo un contenedor de conveniencia Invoke-WebRequest, y debe usar su sintaxis para escribir en un archivo.

wget https://superuser.com/questions/25538 -OutFile rubySlippers.html

1
-OutFilehizo el trabajo!
Dimitry K


1

Puedes obtener WGet para Windows aquí . Alternativamente, puede hacer clic derecho en el enlace de descarga del elemento que desea descargar y elegir Guardar como. Esto descargará el archivo y no lo abrirá en la aplicación asignada.


1

Creo que instalar a wgettravés de Chocolatey es la forma más fácil.

  1. Instalar chocolatey
  2. Desde la línea de comandos, escriba: choco install wget
  3. Luego puede usar wgetdesde la línea de comandos como en los sistemas * nix.

1

Busque la /downloadfunción en https://lolbas-project.github.io .

En este momento hay Bitsadmin.exe, Certutil.exe, Esentutl.exe, Expand.exe, Extrac32.exe, Findstr.exe, Hh.exe, Ieexec.exe, Makecab.exe, Replace.exepara Windows Vista, Windows 7, Windows 8, Windows 8.1, Windows 10 y las versiones equivalentes del servidor.



0

Como se documenta en esta respuesta SU , puede usar lo siguiente en Powershell:

Import-Module bitstransfer
start-bitstransfer -source http://something/something.ext -destination c:\something.ext

-1

Una alternativa al uso de gnuwin32 es unxutils que incluye wget.


puedes administrar con unxutils pero es antiguo, usa una versión anterior de wget. gnuwin32 es lo que hay que usar. no es tan conveniente de instalar y no es tan fácil de encontrar, pero tiene mucho más que unxutils también.
barlop

-3

Si necesita una publicación visual para Windows, aquí hay una.
Puede publicar datos o archivos con él.

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.