Загрузка пакетного файла Windows с URL - PullRequest
94 голосов
/ 06 января 2011

Я пытаюсь загрузить файл с веб-сайта (например, http://www.example.com/package.zip), используя пакетный файл Windows. Я получаю код ошибки, когда пишу следующую функцию:

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

Пакетный файл не похоже на "/" после http. Есть ли способы избежать этих символов, чтобы не предполагать, что они являются параметрами функции?

Ответы [ 18 ]

3 голосов
/ 26 мая 2015

Если битсадмин не ваша чашка чая, вы можете использовать эту команду PowerShell:

Start-BitsTransfer -Source http://www.foo.com/package.zip -Destination C:\somedir\package.zip
2 голосов
/ 07 мая 2015

Это должно работать, я сделал следующее для проекта игрового сервера.Он загрузит zip-архив и распакует его в любой каталог, который вы укажете.

Сохранить как name.bat или name.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

Оригинал: https://github.com/C0nw0nk/SteamCMD-AutoUpdate-Any-Gameserver/blob/master/steam.cmd

2 голосов
/ 03 января 2014

Вместо wget вы также можете использовать aria2 для загрузки файла с определенного URL.

Смотрите следующую ссылку, которая расскажет больше о aria2:

https://aria2.github.io/

2 голосов
/ 19 ноября 2011

BATCH может быть не в состоянии сделать это, но вы можете использовать JScript или VBScript, если вы не хотите использовать инструменты, которые не установлены по умолчанию в Windows.

Первый пример на этой странице загружает двоичный файл в VBScript: http://www.robvanderwoude.com/vbstech_internet_download.php

Этот SO-ответ загружает файл с использованием JScript (IMO, лучший язык): Windows Script Host (jscript): как загрузить двоичный файл?

Затем ваш пакетный скрипт может просто вызвать JScript или VBScript, который загружает файл.

1 голос
/ 10 февраля 2017

На этот вопрос очень хороший ответ: здесь . Мой код основан на этом ответе с некоторыми изменениями.

Сохраните фрагмент ниже как wget.bat и поместите его в системный путь (например, поместите его в каталог и добавьте этот каталог в системный путь).

Вы можете использовать его по своему усмотрению следующим образом:

wget url/to/file [?custom_name]

, где url_to_file является обязательным, а custom_name необязательным

  1. Если имя не указано, загруженный файл будет сохранен под своим именем из URL.
  2. Если указано имя, файл будет сохранен под новым именем.

URL файла и сохраненные имена файлов отображаются в виде разноцветного текста. Если это вызывает у вас проблемы, то проверьте этот проект 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

P.S. Этот код требует, чтобы у вас был установлен PowerShell.

1 голос
/ 07 февраля 2013

Я нашел этот скрипт VB:

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

Работает как шарм.Конфигурируется как функция с очень простым вызовом функции:

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

Первоначально из: http://www.ericphelps.com/scripting/samples/BinaryDownload/index.htm

Вот полный код резервирования:

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
1 голос
/ 15 января 2013

Вы можете настроить запланированное задание с помощью wget, используйте поле «Выполнить» в назначенном задании как:

C:\wget\wget.exe -q -O nul "http://www.google.com/shedule.me"
0 голосов
/ 17 июля 2011

используйте ftp:

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

Измените все в звездочках в соответствии с вашей ситуацией.

...