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

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

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

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

Ответы [ 18 ]

110 голосов
/ 09 декабря 2013

С 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)

88 голосов
/ 13 августа 2013

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

Пробег:

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

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

29 голосов
/ 29 января 2013

Это может быть немного не по теме, но вы можете довольно легко загрузить файл, используя 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)
25 голосов
/ 06 января 2011

В последний раз я проверял, нет команды командной строки для подключения к URL-адресу из командной строки MS.Попробуйте wget для 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

11 голосов
/ 01 мая 2012
' 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

9 голосов
/ 18 ноября 2017

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

Без JScript, VBScript, Powershell и т. Д. ... Только в пакетном режиме!

Некоторые люди говорят, что невозможно загружать файлы с помощью пакетного сценария без использования JScript или VBScript и т. Д. ... Но они определенно ошибаются!

Вот простой метод, который, кажется, хорошо работает для загрузки файлов в ваших пакетных сценариях. Он должен работать практически на любой URL файла. Можно даже использовать прокси-сервер, если он вам нужен.

Для загрузки файлов мы можем использовать BITSADMIN.EXE из системы Windows. Нет необходимости загружать / устанавливать что-либо или использовать какой-либо JScript или VBScript и т. Д. Bitsadmin.exe присутствует в большинстве версий Windows, вероятно, от XP до Windows 10.

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


ИСПОЛЬЗОВАНИЕ:

Вы можете напрямую использовать команду BITSADMIN, например:
bitsadmin /transfer mydownloadjob /download /priority normal "http://example.com/File.zip" "C:\Downloads\File.zip"

Прокси-сервер:
Для подключения через прокси используйте эту команду перед загрузкой.
bitsadmin /setproxysettings mydownloadjob OVERRIDE "proxy-server.com:8080" "<local>"

Нажмите эту ССЫЛКУ , если вы хотите больше информации о BITSadmin.exe


ТАМОЖЕННЫЕ ФУНКЦИИ
:DOWNLOAD_FILE "URL"
:DOWNLOAD_PROXY_ON "SERVER:PORT"
:DOWNLOAD_PROXY_OFF

Я сделал эти 3 функции для упрощения команд bitadmin. Это проще в использовании и запоминании. Это может быть особенно полезно, если вы используете его несколько раз в своих скриптах.

ОБРАТИТЕ ВНИМАНИЕ ...
Перед использованием этих функций вам необходимо сначала скопировать их из CUSTOM_FUNCTIONS.CMD в конец вашего скрипта. Существует также полный пример: DOWNLOAD-EXAMPLE.CMD

: DOWNLOAD_FILE "URL"
Основная функция, будет загружать файлы с URL.

: DOWNLOAD_PROXY_ON "СЕРВЕР: ПОРТ"
(Необязательно) Вы можете использовать эту функцию, если вам нужен прокси-сервер.
Вызов функции: DOWNLOAD_PROXY_OFF отключит ее.

Пример:
CALL :DOWNLOAD_PROXY_ON "proxy-server.com:8080"
CALL :DOWNLOAD_FILE "http://example.com/File.zip" "C:\Downloads\File.zip"
CALL :DOWNLOAD_PROXY_OFF


CUSTOM_FUNCTIONS.CMD

:DOWNLOAD_FILE
    rem BITSADMIN COMMAND FOR DOWNLOADING FILES:
    bitsadmin /transfer mydownloadjob /download /priority normal %1 %2
GOTO :EOF

:DOWNLOAD_PROXY_ON
    rem FUNCTION FOR USING A PROXY SERVER:
    bitsadmin /setproxysettings mydownloadjob OVERRIDE %1 "<local>"
GOTO :EOF

:DOWNLOAD_PROXY_OFF
    rem FUNCTION FOR STOP USING A PROXY SERVER:
    bitsadmin /setproxysettings mydownloadjob NO_PROXY
GOTO :EOF

ЗАГРУЗКИ EXAMPLE.CMD

@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=https://upload.wikimedia.org/wikipedia/en/8/86/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 :DOWNLOAD_PROXY_ON "PROXY-SERVER.COM:8080"

rem HERE IS THE MAIN DOWNLOADING COMMAND:
CALL :DOWNLOAD_FILE "%FILE_URL%" "%SAVING_TO%"

rem UNCOMMENT NEXT LINE FOR DISABLING ANY PROXY:
rem CALL :DOWNLOAD_PROXY_OFF

ECHO.

rem THIS IS THE END...
PAUSE
EXIT /B




rem FUNCTIONS SECTION


:DOWNLOAD_FILE
    rem BITSADMIN COMMAND FOR DOWNLOADING FILES:
    bitsadmin /transfer mydownloadjob /download /priority normal %1 %2
GOTO :EOF

:DOWNLOAD_PROXY_ON
    rem FUNCTION FOR USING A PROXY SERVER:
    bitsadmin /setproxysettings mydownloadjob OVERRIDE %1 "<local>"
GOTO :EOF

:DOWNLOAD_PROXY_OFF
    rem FUNCTION FOR STOP USING A PROXY SERVER:
    bitsadmin /setproxysettings mydownloadjob NO_PROXY
GOTO :EOF
5 голосов
/ 28 мая 2013

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

@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

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

4 голосов
/ 17 июля 2012
  1. Скачать Wget отсюда http://downloads.sourceforge.net/gnuwin32/wget-1.11.4-1-setup.exe

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

  3. Затем создайте файл .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
    
  4. Настройка URL-адреса и пути к файлу в скрипте

  5. Запустите файл и получите прибыль!
3 голосов
/ 06 января 2011

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

3 голосов
/ 09 июня 2015

Использование Преобразователь Bat To Exe

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

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

или

%extd% /download /2639768/zagruzka-paketnogo-faila-windows-s-url thistopic.html

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

...