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


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

Estoy usando Windows, entonces una versión de Windows de Wget haría.


282


origen


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
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
¿Cómo se descarga con MS Word? - Jaime Hablutzel
@JaimeHablutzel ¿Por qué querrías descargar algo a través de MS Word? MS Word no es una terminal. - Braden Best
@SDsolar O simplemente upvote / mejorar esta respuesta abajo. - Franklin Yu


Respuestas:


Wget para Windows Deberia trabajar.

Desde el Preguntas frecuentes sobre Wget Wiki:

GNU Wget es una utilidad de red gratuita para recuperar archivos del mundo   Wide Web usando HTTP y FTP, los dos más utilizados en Internet   protocolos. Funciona de forma no interactiva, lo que permite el trabajo en el   fondo, después de haber cerrado la sesión.

De esta sección de Preguntas Frecuentes, se sugieren enlaces de descarga:

Binarios de Windows

Se usa el enlace con cortesía de Jernej Simončič en su lugar.


155



También hay Winwget cybershade.us/winwget si prefieres una GUI - Col
La versión independiente se puede descargar desde este enlace. - Vito Gentile
Más reciente, incluso actualizado (a partir de hoy) Compilaciones de Windows, proporcionado por Jernej Simončič - Gras Double
@VitoShadow enlace roto - The Red Pea
@cixelsyd Enlace actualizado a la fuente alternativa. - clearkimura


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 tan bien con las consultas GET.

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

$client.Credentials =  Get-Credential                

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


272



También puedes hacerlo en una línea: (new-object System.Net.WebClient).DownloadFile('http://www.xyz.net/file.txt','C:\tmp\file.txt') - schellack
@Rob powershell está integrado en Windows ... - nhinkle♦
Desde Vista arriba, sí. - Arran
@ BrainSlugs83, absolutamente, pero muchos, muchos, la gente todavía usa XP. Es simplemente algo a tener en cuenta. - Arran
@ BrainSlugs83, usted subestima la cantidad de personas que aún se encuentran en sistemas Windows anteriores. No entiendo el problema, señalé que solo está en Vista hacia arriba. La gente puede optar por ignorarlo, o decir "¡oye gracias!", Pero ¿tú ...? Si tienes un problema, crea un chat y podemos hablar. Alguien con representante (como usted) debería darse cuenta aquíno es el lugar para esta discusión. - Arran


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


64



Esto no funciona con los redireccionamientos en sourceforge (y posiblemente otros sitios), a diferencia de System.Net.WebClient. Sin embargo, puedes hacer Invoke-WebRequest trabajar agregando -UserAgent [Microsoft.PowerShell.Commands.PSUserAgent]::FireFox. - Ela782
Esta es la respuesta correcta ahora, @ CédricBelin tiene razón. La pregunta y la respuesta aceptada son bastante antiguas. - Factor Mystic
Para ejecutar esto desde una terminal cmd: powershell -command "& {&'iwr' index.html http://superuser.com}" - dario_ramos
¿Hay una opción para ver el progreso de la descarga? - Franklin Yu
@FranklinYu el progreso mostrará si el archivo es lo suficientemente grande - Steven Penny


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

BITSAdmin es una herramienta de línea de comandos que puedes usar para crear descargas   o sube trabajos y supervisa su progreso.

EDITAR: 26.01.15 - Aquí está mi resumen 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 es posible descargar un archivo con certutil también:

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

Certutil no está instalado por defecto en XP / Win2003, pero está disponible en las versiones de Windows más recientes. Para XP / 2003 necesitarás el Paquete de herramientas administrativas para Windows Server 2003


39



Interesante. Esa es una pieza de software torpe en comparación con wget. - Matt H
Tenga en cuenta que no se envía con Windows XP, y tal vez tampoco con otras versiones. - Ian Dunn
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 las proporcionan los cmdlets BITS PowerShell. - nulldev07
@MattH: ¿porque no está dispuesto a ser wget en primer lugar? - ver en.wikipedia.org/wiki/Background_Intelligent_Transfer_Service - peterchen
No se puede agregar el archivo - 0x80070057 - Tomáš Zato


Guarde el siguiente texto como wget.js y 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");
*/

28



¿En qué idioma es 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-.
Útil para archivos individuales. Necesita mejorar para descarga recursiva y https. - opticyclic
@GRAMO-. Llego tarde a la fiesta, pero eso es JavaScript. - prooffreader
Intenté hacer eso por database.clamav.net/daily.cvd, pero descargó solo 88kB de 44MB :( - kokbira


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 un código de Análisis de URL para el nombre de archivo con espacio.


16



¿por qué el voto abajo? esto se ve bien para mí y es una respuesta directa a la pregunta. Sí, es torpe y podría mejorarse, como el escape de ampersands (&) en la url, pero funciona como está. - matt wilkie


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

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


También es importante saber que hay ambos wget y curl alias integrados en todas las versiones modernas de Windows Powershell. Ellos son equivalentes.

No se requieren archivos adicionales o descargas para obtener wgetfuncionalidad:

Usando Curl In Powershell (El friki sociable)

Extracto:

Puede escribir un comando cURL como uno que descarga un archivo de un   Repositorio de GitHub

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

y parecerá que funciona, pero lo que en realidad está haciendo es solo   usando cURL como un alias. En la instancia anterior, lo que sucederá es   que 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 simplemente llama al comando Invoke-WebRequest. Son similares pero no iguales, por lo que la solicitud anterior no nos funciona.

enter image description here

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

enter image description here

(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 azuredeploy.json al archivo local newfile.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.


15



Esto se hace directamente en una línea, pero la línea es bastante larga y no se puede leer de inmediato de un vistazo. - SDsolar
La mejor manera, gracias - Konstantin Chernov