Загрузка файла пакетного файла Windows из URL-адреса
Я пытаюсь загрузить файл с веб-сайта (например, http://www.example.com/package.zip) с использованием пакетного файла Windows. Я получаю код ошибки, когда я пишу следующую функцию:
xcopy /E /Y "http://www.example.com/package.zip"
Пакетный файл, похоже, не похож на "/" после http. Есть ли способ избежать этих символов, поэтому он не предполагает, что они являются параметрами функции?
Ответы
Ответ 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
Измените все звездочки, чтобы они соответствовали вашей ситуации.