Descarga de archivo por lotes de Windows desde una URL



Answers

Hay un componente estándar de Windows que puede lograr lo que intenta hacer: BITS . Se ha incluido en Windows desde XP y 2000 SP3.

Correr:

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

El nombre del trabajo es simplemente el nombre para mostrar del trabajo de descarga: configúrelo para que describa lo que está haciendo.

Question

Estoy tratando de descargar un archivo de un sitio web (por ejemplo, http://www.example.com/package.zip ) usando un archivo por lotes de Windows. Obtengo un código de error cuando escribo la función a continuación:

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

Parece que al archivo por lotes no le gusta el "/" después del http. ¿Hay alguna forma de escapar de esos caracteres por lo que no supone que son parámetros de función?




En lugar de wget, también puedes usar aria2 para descargar el archivo de una URL en particular.

Vea el siguiente enlace que explicará más sobre aria2:

https://aria2.github.io/




AFAIK, Windows no tiene una herramienta de línea de comandos integrada para descargar un archivo. Pero puede hacerlo desde un VBScript, y puede generar el archivo VBScript desde un lote utilizando el eco y la redirección de salida:

@echo off

rem Windows has no built-in wget or curl, so generate a VBS script to do it:
rem -------------------------------------------------------------------------
set DLOAD_SCRIPT=download.vbs
echo Option Explicit                                                    >  %DLOAD_SCRIPT%
echo Dim args, http, fileSystem, adoStream, url, target, status         >> %DLOAD_SCRIPT%
echo.                                                                   >> %DLOAD_SCRIPT%
echo Set args = Wscript.Arguments                                       >> %DLOAD_SCRIPT%
echo Set http = CreateObject("WinHttp.WinHttpRequest.5.1")              >> %DLOAD_SCRIPT%
echo url = args(0)                                                      >> %DLOAD_SCRIPT%
echo target = args(1)                                                   >> %DLOAD_SCRIPT%
echo WScript.Echo "Getting '" ^& target ^& "' from '" ^& url ^& "'..."  >> %DLOAD_SCRIPT%
echo.                                                                   >> %DLOAD_SCRIPT%
echo http.Open "GET", url, False                                        >> %DLOAD_SCRIPT%
echo http.Send                                                          >> %DLOAD_SCRIPT%
echo status = http.Status                                               >> %DLOAD_SCRIPT%
echo.                                                                   >> %DLOAD_SCRIPT%
echo If status ^<^> 200 Then                                            >> %DLOAD_SCRIPT%
echo    WScript.Echo "FAILED to download: HTTP Status " ^& status       >> %DLOAD_SCRIPT%
echo    WScript.Quit 1                                                  >> %DLOAD_SCRIPT%
echo End If                                                             >> %DLOAD_SCRIPT%
echo.                                                                   >> %DLOAD_SCRIPT%
echo Set adoStream = CreateObject("ADODB.Stream")                       >> %DLOAD_SCRIPT%
echo adoStream.Open                                                     >> %DLOAD_SCRIPT%
echo adoStream.Type = 1                                                 >> %DLOAD_SCRIPT%
echo adoStream.Write http.ResponseBody                                  >> %DLOAD_SCRIPT%
echo adoStream.Position = 0                                             >> %DLOAD_SCRIPT%
echo.                                                                   >> %DLOAD_SCRIPT%
echo Set fileSystem = CreateObject("Scripting.FileSystemObject")        >> %DLOAD_SCRIPT%
echo If fileSystem.FileExists(target) Then fileSystem.DeleteFile target >> %DLOAD_SCRIPT%
echo adoStream.SaveToFile target                                        >> %DLOAD_SCRIPT%
echo adoStream.Close                                                    >> %DLOAD_SCRIPT%
echo.                                                                   >> %DLOAD_SCRIPT%
rem -------------------------------------------------------------------------

cscript //Nologo %DLOAD_SCRIPT% http://example.com targetPathAndFile.html

Más explicación here




Esta pregunta tiene una muy buena respuesta here . Mi código está basado exclusivamente en esa respuesta con algunas modificaciones.

Guarde el fragmento a continuación como wget.bat y póngalo en la ruta del sistema (por ejemplo, colóquelo en un directorio y agregue este directorio a la ruta del sistema).

Puedes usarlo en tu cli de la siguiente manera:

wget url/to/file [?custom_name]

donde url_to_file es obligatorio y custom_name es opcional

  1. Si no se proporciona el nombre, el archivo descargado se guardará por su propio nombre de la url.
  2. Si se proporciona el nombre, el nuevo nombre guardará el archivo.

La URL del archivo y los nombres de archivo guardados se muestran en texto de color ansi. Si eso le causa problemas, entonces verifique this proyecto github.

@echo OFF
setLocal EnableDelayedExpansion
set Url=%1
set Url=!Url:http://=!
set Url=!Url:/=,!
set Url=!Url:%%20=?!
set Url=!Url: =?!

call :LOOP !Url!

set FileName=%2
if "%2"=="" set FileName=!FN!

echo.
echo.Downloading: [1;33m%1[0m to [1;33m\!FileName![0m

powershell.exe -Command wget %1 -OutFile !FileName!

goto :EOF
:LOOP
if "%1"=="" goto :EOF
set FN=%1
set FN=!FN:?= !
shift
goto :LOOP

PS Este código requiere que tenga instalado PowerShell.




No puedes usar xcopy en lugar de http. Intenta descargar wget para Windows. Eso puede hacer el truco. Es una utilidad de línea de comandos para la descarga no interactiva de archivos a través de http. Puede obtenerlo en http://gnuwin32.sourceforge.net/packages/wget.htm




La última vez que verifiqué, no hay un comando de línea de comando para conectarse a una URL desde la línea de comandos de MS. Pruebe wget para Windows:
http://gnuwin32.sourceforge.net/packages/wget.htm

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

En Linux, puedes usar "wget".

Alternativamente, puede probar VBScript. Son como los programas de línea de comandos, pero son scripts interpretados por el host de scripts wscript.exe. Aquí hay un ejemplo de descarga de un archivo usando VBS:
https://serverfault.com/questions/29707/download-file-from-vbscript




Si bitsadmin no es su taza de té, puede usar este comando de PowerShell:

Start-BitsTransfer -Source http://www.foo.com/package.zip -Destination C:\somedir\package.zip



Esto debería funcionar. Hice lo siguiente para un proyecto de servidor de juegos. Descargará el archivo comprimido y lo extraerá a cualquier directorio que especifique.

Guardar como nombre.bat o nombre.cmd

@echo off
set downloadurl=http://media.steampowered.com/installer/steamcmd.zip
set downloadpath=C:\steamcmd\steamcmd.zip
set directory=C:\steamcmd\
%WINDIR%\System32\WindowsPowerShell\v1.0\powershell.exe -Command "& {Import-Module BitsTransfer;Start-BitsTransfer '%downloadurl%' '%downloadpath%';$shell = new-object -com shell.application;$zip = $shell.NameSpace('%downloadpath%');foreach($item in $zip.items()){$shell.Namespace('%directory%').copyhere($item);};remove-item '%downloadpath%';}"
echo download complete and extracted to the directory.
pause

Original: https://github.com/C0nw0nk/SteamCMD-AutoUpdate-Any-Gameserver/blob/master/steam.cmd




usar ftp:

(ftp *yourewebsite.com*-a)
cd *directory*
get *filename.doc*
close

Cambie todo en asteriscos para adaptarse a su situación.




Related