Подтвердить что ты не робот

Загрузка файла пакетного файла Windows из URL-адреса

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

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

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

4b9b3361

Ответ 1

С помощью PowerShell 2.0 (предустановленная Windows 7) вы можете использовать:

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

Начиная с PowerShell 3.0 (предустановленная Windows 8) вы можете использовать Invoke-WebRequest:

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

Из командного файла они вызываются:

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 доступен для установки на XP, 3.0 для Windows 7)

Ответ 2

Существует стандартный компонент Windows, который может достичь того, что вы пытаетесь сделать: BITS. Он был включен в Windows с XP и 2000 SP3.

Run:

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

Имя задания - это просто отображаемое имя для задания загрузки - установите его на то, что описывает, что вы делаете.

Ответ 3

Это может быть немного не по теме, но вы можете легко скачать файл, используя Powershell. Powershell поставляется с современными версиями Windows, поэтому вам не нужно устанавливать какие-либо дополнительные материалы на компьютер. Я узнал, как это сделать, читая эту страницу:

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

Код был:

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

Ответ 4

Последнее, что я проверил, не имеет команды командной строки для подключения к URL-адресу из командной строки MS. Попробуйте wget for Windows:
http://gnuwin32.sourceforge.net/packages/wget.htm

или URL2File:
http://www.chami.com/free/url2file_wincon.html

В Linux вы можете использовать "wget".

Кроме того, вы можете попробовать VBScript. Они похожи на программы командной строки, но они являются скриптами, интерпретируемыми хостом сценариев wscript.exe. Ниже приведен пример загрузки файла с помощью VBS:
https://serverfault.com/questions/29707/download-file-from-vbscript

Ответ 5

' 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

затем

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

или просто дважды щелкните его, чтобы протестировать в windows

Ответ 6

AFAIK, Windows не имеет встроенного инструмента командной строки для загрузки файла. Но вы можете сделать это из VBScript, и вы можете сгенерировать файл VBScript из пакета с использованием перенаправления эха и вывода:

@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

Больше объяснений здесь

Ответ 7

  • Загрузить Wget отсюда http://downloads.sourceforge.net/gnuwin32/wget-1.11.4-1-setup.exe

  • Затем установите его.

  • Затем создайте файл .bat и поместите его в него

    @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
    
  • Откорректируйте URL-адрес и путь к файлу в script

  • Запустите файл и получите прибыль!

Ответ 8

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

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

Ответ 9

Используйте Bat to Exe Converter

Создайте пакетный файл и поместите в него что-то вроде кода ниже

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

или

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

и преобразовать его в exe.

Ответ 10

Вы не можете использовать xcopy над http. Попробуйте загрузить wget для Windows. Это может сделать трюк. Это утилита командной строки для неинтерактивной загрузки файлов через http. Вы можете получить его на http://gnuwin32.sourceforge.net/packages/wget.htm

Ответ 11

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

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

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

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

Ответ 12

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

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

Ответ 13

Я нашел этот VB script:

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

Ответ 14

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

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

https://aria2.github.io/

Ответ 15

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

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

Вы можете использовать его в своем кли:

wget url/to/file [?custom_name]

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

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

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

Ответ 16

Загрузка файлов в PURE BATCH.

Многие говорят, что это невозможно, но это не так! Я написал очень простую функцию, и она хорошо работает для большинства URL-адресов. Он использует команду "bitsadmin" для загрузки файлов, которые являются частью Windows по умолчанию. (Нет необходимости загружать инсталляцию).

Нет JScript, нет VBScript, нет Powershell... Только чистый пакет!

Наслаждайтесь!


Вот простой script, показывающий, как использовать эту функцию.

@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

Если вы хотите получить дополнительную информацию о BITSadmin...

Ответ 17

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

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

Ответ 18

использовать ftp:

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

Измените все звездочки, чтобы они соответствовали вашей ситуации.