tag mac from files batch and windows batch-file download scripting
http://www.example.com/package.zip

windows - mac - tag folders



Descarga de archivo por lotes de Windows desde una URL (18)

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?


Descargar archivos en PURE BATCH.

Mucha gente dice que es imposible, ¡pero no lo es! Escribí una función muy simple y está funcionando bien para la mayoría de las URL. Está utilizando el comando "bitsadmin" para descargar archivos que forma parte de Windows de forma predeterminada. (No es necesario descargar o instalar nada).

Sin JScript, sin VBScript, sin Powershell ... ¡solo lotes puros!

¡Disfrutar!

Aquí hay una secuencia de comandos simple que muestra cómo usar esta función.

@echo off setlocal :VARIABLES rem EINSTEIN PICTURE (URL) SET "FILE_URL=http://www.deism.com/images/Einstein_laughing.jpeg" rem SAVE FILE WHERE THE SCRIPT IS LOCATED (DEFAULT) SET "SAVE_TO=%~dp0" SET "SAVE_TO=%SAVE_TO%Einstein_laughing.jpeg" rem SAVE FILE IN CUSTOM PATH rem SET "SAVE_TO=C:/Folder/Einstein_laughing.jpeg" :FUNCTION_CALL rem HERE WE CALL OUR FUNCTION (WRITTEN BELOW) THEN WE EXIT THE SCRIPT CALL :DOWNLOAD %FILE_URL% %SAVE_TO% ECHO. PAUSE & EXIT /B rem DOWNLOAD FUNCTION :DOWNLOAD setlocal SET "_URL_=%1" SET "_SAVE_TO_=%2" ECHO. ECHO DOWNLOADING: "%_URL_%" ECHO SAVING TO: "%_SAVE_TO_%" ECHO. bitsadmin /transfer mydownloadjob /download /priority normal "%_URL_%" "%_SAVE_TO_%" rem BITSADMIN DOWNLOAD EXAMPLE rem bitsadmin /transfer mydownloadjob /download /priority normal http://example.com/filename.zip C:/Users/username/Downloads/filename.zip endlocal GOTO :EOF

Si quieres más información sobre BITSadmin ...


  1. Descargue Wget desde aquí http://downloads.sourceforge.net/gnuwin32/wget-1.11.4-1-setup.exe

  2. Luego instálalo.

  3. Luego crea un archivo .bat y ponlo en él

    @echo off for /F "tokens=2,3,4 delims=/ " %%i in (''date/t'') do set y=%%k for /F "tokens=2,3,4 delims=/ " %%i in (''date/t'') do set d=%%k%%i%%j for /F "tokens=5-8 delims=:. " %%i in (''echo.^| time ^| find "current" '') do set t=%%i%%j set t=%t%_ if "%t:~3,1%"=="_" set t=0%t% set t=%t:~0,4% set "theFilename=%d%%t%" echo %theFilename% cd "C:/Program Files/GnuWin32/bin" wget.exe --output-document C:/backup/file_%theFilename%.zip http://someurl/file.zip

  4. Ajuste la URL y la ruta del archivo en la secuencia de comandos

  5. ¡Ejecuta el archivo y saca provecho!

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


BATCH puede no ser capaz de hacer esto, pero puede usar JScript o VBScript si no desea usar herramientas que no están instaladas por defecto con Windows.

El primer ejemplo en esta página descarga un archivo binario en VBScript: http://www.robvanderwoude.com/vbstech_internet_download.php

Esta respuesta SO descarga un archivo usando JScript (IMO, el mejor lenguaje): Windows Script Host (jscript): ¿cómo descargo un archivo binario?

Su secuencia de comandos por lotes puede llamar a un JScript o VBScript que descarga el archivo.


Con PowerShell 2.0 (Windows 7 preinstalado) puede usar:

(New-Object Net.WebClient).DownloadFile(''http://www.example.com/package.zip'', ''package.zip'')

Comenzando con PowerShell 3.0 (Windows 8 preinstalado) puede usar Invoke-WebRequest :

Invoke-WebRequest http://www.example.com/package.zip -OutFile package.zip

De un archivo por lotes se llaman:

powershell -Command "(New-Object Net.WebClient).DownloadFile(''http://www.example.com/package.zip'', ''package.zip'')" powershell -Command "Invoke-WebRequest http://www.example.com/package.zip -OutFile package.zip"

(PowerShell 2.0 está disponible para su instalación en XP, 3.0 para Windows 7)


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/


Encontré este script VB:

http://www.olafrv.com/?p=385

Funciona de maravilla. Configurado como una función con una llamada de función muy simple:

SaveWebBinary "http://server/file1.ext1", "C:/file2.ext2"

Originalmente de: http://www.ericphelps.com/scripting/samples/BinaryDownload/index.htm

Aquí está el código completo de redundancia:

Function SaveWebBinary(strUrl, strFile) ''As Boolean Const adTypeBinary = 1 Const adSaveCreateOverWrite = 2 Const ForWriting = 2 Dim web, varByteArray, strData, strBuffer, lngCounter, ado On Error Resume Next ''Download the file with any available object Err.Clear Set web = Nothing Set web = CreateObject("WinHttp.WinHttpRequest.5.1") If web Is Nothing Then Set web = CreateObject("WinHttp.WinHttpRequest") If web Is Nothing Then Set web = CreateObject("MSXML2.ServerXMLHTTP") If web Is Nothing Then Set web = CreateObject("Microsoft.XMLHTTP") web.Open "GET", strURL, False web.Send If Err.Number <> 0 Then SaveWebBinary = False Set web = Nothing Exit Function End If If web.Status <> "200" Then SaveWebBinary = False Set web = Nothing Exit Function End If varByteArray = web.ResponseBody Set web = Nothing ''Now save the file with any available method On Error Resume Next Set ado = Nothing Set ado = CreateObject("ADODB.Stream") If ado Is Nothing Then Set fs = CreateObject("Scripting.FileSystemObject") Set ts = fs.OpenTextFile(strFile, ForWriting, True) strData = "" strBuffer = "" For lngCounter = 0 to UBound(varByteArray) ts.Write Chr(255 And Ascb(Midb(varByteArray,lngCounter + 1, 1))) Next ts.Close Else ado.Type = adTypeBinary ado.Open ado.Write varByteArray ado.SaveToFile strFile, adSaveCreateOverWrite ado.Close End If SaveWebBinary = True End Function


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.


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


Esto podría ser un poco fuera de tema, pero puede descargar un archivo con Powershell . Powershell viene con versiones modernas de Windows para que no tengas que instalar ningún material extra en la computadora. Aprendí a hacerlo leyendo esta página:

http://teusje.wordpress.com/2011/02/19/download-file-with-powershell/

El código era:

$webclient = New-Object System.Net.WebClient $url = "http://www.example.com/file.txt" $file = "$pwd/file.txt" $webclient.DownloadFile($url,$file)


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.


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


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


Puede configurar una tarea programada usando wget, use el campo "Ejecutar" en la tarea programada como:

C:/wget/wget.exe -q -O nul "http://www.google.com/shedule.me"


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


Utilice Bat To Exe Converter

Crea un archivo por lotes y pon algo así como el código debajo en él

%extd% /download http://www.examplesite.com/file.zip file.zip

o

%extd% /download http://.com/questions/4619088/windows-batch-file-file-download-from-a-url thistopic.html

y convertirlo a exe


usar ftp:

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

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


'' Create an HTTP object myURL = "http://www.google.com" Set objHTTP = CreateObject( "WinHttp.WinHttpRequest.5.1" ) '' Download the specified URL objHTTP.Open "GET", myURL, False objHTTP.Send intStatus = objHTTP.Status If intStatus = 200 Then WScript.Echo " " & intStatus & " A OK " +myURL Else WScript.Echo "OOPS" +myURL End If

entonces

C:/>cscript geturl.vbs Microsoft (R) Windows Script Host Version 5.7 Copyright (C) Microsoft Corporation. All rights reserved. 200 A OK http://www.google.com

o simplemente haz doble clic para probar en Windows