Download di file di file batch di Windows da un URL

Sto cercando di scaricare un file da un sito Web (ad esempio http://www.example.com/package.zip ) utilizzando un file batch di Windows. Ricevo un codice di errore quando scrivo la funzione seguente:

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

Il file batch non sembra gradire il “/” dopo l’http. Ci sono dei modi per sfuggire a quei personaggi, quindi non presuppone che siano parametri di funzione?

Con PowerShell 2.0 (Windows 7 preinstallato) è ansible utilizzare:

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

A partire da PowerShell 3.0 (Windows 8 preinstallato) è ansible utilizzare Invoke-WebRequest :

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

Da un file batch vengono chiamati:

 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 è disponibile per l’installazione su XP, 3.0 per Windows 7)

C’è un componente standard di Windows che può raggiungere quello che stai cercando di fare: BITS . È stato incluso in Windows da XP e 2000 SP3.

Correre:

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

Il nome del lavoro è semplicemente il nome visualizzato per il processo di download: impostalo su qualcosa che descrive ciò che stai facendo.

Questo potrebbe essere un po ‘fuori tema, ma puoi facilmente scaricare un file usando Powershell . Powershell viene fornito con le versioni moderne di Windows in modo da non dover installare oggetti aggiuntivi sul computer. Ho imparato come farlo leggendo questa pagina:

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

Il codice era:

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

Ultimo ho controllato, non c’è un comando da riga di comando per connettersi a un URL dalla riga di comando di MS. Prova wget per Windows:
http://gnuwin32.sourceforge.net/packages/wget.htm

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

In Linux, puoi usare “wget”.

In alternativa, puoi provare VBScript. Sono come i programmi a riga di comando, ma sono script interpretati dall’host degli script wscript.exe. Ecco un esempio di download di un file utilizzando VBS:
https://serverfault.com/questions/29707/download-file-from-vbscript

 ' 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 

poi

 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 semplicemente doppio clic per testare in Windows

AFAIK, Windows non ha uno strumento da riga di comando incorporato per scaricare un file. Ma puoi farlo da un VBScript, e puoi generare il file VBScript da batch usando echo e redirezione in uscita:

 @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 

Altre spiegazioni qui

  1. Scarica Wget da qui http://downloads.sourceforge.net/gnuwin32/wget-1.11.4-1-setup.exe

  2. Quindi installalo.

  3. Quindi crea un file .bat e inseriscilo

     @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. Regola l’URL e il percorso del file nello script

  5. Esegui il file e guadagna!

Se bitsadmin non è la tua tazza di tè, puoi usare questo comando di PowerShell:

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

Utilizza il convertitore Bat To Exe

Crea un file batch e inserisci qualcosa come il codice qui sotto

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

o

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

e convertirlo in exe.

Download di file in PURE BATCH …

Senza JScript, VBScript, PowerShell, ecc … Solo puro Batch!

Alcuni dicono che non è ansible scaricare file con uno script batch senza usare JScript o VBScript … Ma sono decisamente sbagliati!

Ecco un metodo semplice che sembra funzionare piuttosto bene per il download di file in script batch. (Non so perché, ma sembra che non riesca a scaricare i file su qualche URL molto raro, ma la maggior parte di essi funziona bene).

Per scaricare i file, possiamo utilizzare l’eseguibile “BITSADMIN.EXE” dai file di sistema di Windows. Non è necessario scaricare / installare programmi o utilizzare JScript, VBScript, ecc. Bitsadmin.exe è presente sulla maggior parte delle versioni di Microsoft Windows, probabilmente da Windows XP a Windows 10.

Godere!


USO:

Puoi usare direttamente il comando BITSADMIN, in questo modo:

BITSADMIN / trasferisci mydownloadjob / download / priority normal ” http://example.com/filename.zip ” “c: \ users \ username \ downloads \ filename.zip”


FUNZIONI PERSONALIZZATE

:SCARICARE
: PROXY_SETTINGS
: PROXY_SETTINGS_OFF

Ho scritto queste funzioni molto semplici che potrebbero essere utili per alcune persone.

: SCARICA “URL”
La funzione principale, scaricherà i file da un determinato URL.

: PROXY_SETTINGS “Proxy-Server”
Opzionale. È ansible utilizzare la funzione “: PROXY_SETTINGS” se è necessario utilizzare un server proxy e la funzione “: PROXY_SETTINGS_OFF” per l’arresto utilizzando questo proxy.

ESEMPIO:
CHIAMATA: PROXY_SETTINGS “proxy-server.com:8080”
CHIAMATA: SCARICA ” http://example.com/filename.zip ” “c: \ utenti \ nomeutente \ download \ nomefile.zip”
CHIAMATA: PROXY_SETTINGS_OFF

Nota: per utilizzare queste funzioni negli script, è necessario copiarle / incollarle dallo script seguente. (Dalla riga 45 alla 75)


ESEMPIO DI SCRIPT:

 @ECHO OFF SETLOCAL rem FOR DOWNLOADING, THIS SCRIPT IS USING THE "BITSADMIN.EXE" SYSTEM FILE. rem IT IS PRESENT ON MOST WINDOWS VERSION, PROBABLY FROM WINDOWS XP TO WINDOWS 10. :SETUP rem DOWNLOADING A PICTURE (URL): SET "FILE_URL=http://sofit.miximages.com/scripting/Einstein_tongue.jpg" rem SAVING FILE TO THE SCRIPT FOLDER: SET "SAVING_TO=Einstein_tongue.jpg" SET "SAVING_TO=%~dp0%SAVING_TO%" rem OR, UNCOMMENT NEXT LINE FOR SAVING TO ANY OTHER PATH: rem SET "SAVING_TO=C:\Folder\Einstein_tongue.jpg" :MAIN ECHO. ECHO FILE URL: "%FILE_URL%" ECHO SAVING TO: "%SAVING_TO%" ECHO. rem UNCOMENT AND MODIFY THE NEXT LINE IF YOU NEED TO USE A PROXY SERVER: rem CALL :PROXY_SETTINGS "PROXY-SERVER.COM:8080" rem HERE IS OU MAIN COMMAND FOR CALLING OUR :DOWNLOAD FUNCTION: CALL :DOWNLOAD "%FILE_URL%" "%SAVING_TO%" rem UNCOMMENT NEXT LINE FOR DISABLING ANY PROXY: rem CALL :PROXY_SETTINGS_OFF ECHO. rem GET OUT OF HERE! PAUSE EXIT /B rem CUSTOM FUNCTIONS :DOWNLOAD rem BITSADMIN COMMAND FOR DOWNLOADING FILES: bitsadmin /transfer mydownloadjob /download /priority normal %1 %2 rem BASIC EXAMPLE OF BITSADMIN.EXE PROXY COMMAND LINE: rem bitsadmin /transfer mydownloadjob /download /priority normal "http://example.com/filename.zip" "C:\Users\username\Downloads\filename.zip" GOTO :EOF :PROXY_SETTINGS rem FUNCTION FOR USING A PROXY SERVER: bitsadmin /setproxysettings mydownloadjob OVERRIDE %1 "" rem BASIC EXAMPLE OF BITSADMIN.EXE PROXY COMMAND LINE: rem bitsadmin /setproxysettings MyJob OVERRIDE proxy1:80 "" GOTO :EOF :PROXY_SETTINGS_OFF rem FUNCTION FOR STOP USING A PROXY SERVER: bitsadmin /setproxysettings mydownloadjob NO_PROXY GOTO :EOF 

Puoi fare clic su questo LINK se desideri maggiori informazioni su BITSadmin …

Non è ansible utilizzare xcopy su http. Prova a scaricare wget per Windows. Questo potrebbe fare il trucco. È un’utilità da riga di comando per il download non interattivo di file tramite http. Puoi ottenerlo su http://gnuwin32.sourceforge.net/packages/wget.htm

BATCH potrebbe non essere in grado di farlo, ma è ansible utilizzare JScript o VBScript se non si desidera utilizzare strumenti non installati per impostazione predefinita con Windows.

Il primo esempio in questa pagina scarica un file binario in VBScript: http://www.robvanderwoude.com/vbstech_internet_download.php

Questa risposta SO scarica un file utilizzando JScript (IMO, la lingua migliore): Windows Script Host (jscript): come faccio a scaricare un file binario?

Lo script batch può quindi richiamare un JScript o VBScript che scarica il file.

Questo dovrebbe funzionare ho fatto quanto segue per un progetto di server di gioco. Scaricherà lo zip e lo estrarrà in qualunque directory tu specifichi.

Salva come nome.bat o nome.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 

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

Ho trovato questo script VB:

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

Funziona come un fascino. Configurato come una funzione con una chiamata di funzione molto semplice:

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

Originariamente da: http://www.ericphelps.com/scripting/samples/BinaryDownload/index.htm

Ecco il codice completo per la ridondanza:

 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 

Invece di wget puoi anche usare aria2 per scaricare il file da un particolare URL.

Vedi il seguente link che spiegherà di più su aria2:

https://aria2.github.io/

Questa domanda ha una risposta molto buona qui . Il mio codice è puramente basato su quella risposta con alcune modifiche.

Salva sotto snippet come wget.bat e inseriscilo nel tuo percorso di sistema (es. Inseriscilo in una directory e aggiungi questa directory al percorso di sistema).

Puoi usarlo nel tuo cli come segue:

wget url/to/file [?custom_name]

dove url_to_file è obbligatorio e custom_name è facoltativo

  1. Se il nome non viene fornito, il file scaricato verrà salvato con il proprio nome dall’URL.
  2. Se viene fornito il nome, il file verrà salvato con il nuovo nome.

L’url del file e i nomi file salvati vengono visualizzati in un testo colorato ansi. Se questo causa problemi, controlla questo progetto 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 Questo codice richiede che PowerShell sia installato.

È ansible impostare un’attività pianificata utilizzando wget, utilizzare il campo “Esegui” nell’attività pianificata come:

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

usa ftp:

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

Cambia tutto in asterischi per adattarlo alla tua situazione.