programing

URL에서 Windows 배치 파일 다운로드

newsource 2023. 5. 20. 10:50

URL에서 Windows 배치 파일 다운로드

웹 사이트(예: http://www.example.com/package.zip) 에서 Windows 배치 파일을 사용하여 파일을 다운로드하려고 합니다.아래 기능을 쓸 때 오류 코드가 표시됩니다.

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

배치 파일이 http 뒤의 "/"를 좋아하지 않는 것 같습니다.그 캐릭터들이 함수 매개 변수라고 가정하지 않도록 탈출할 수 있는 방법이 있습니까?

PowerShell 2.0(윈도우즈 7 사전 설치)을 사용하면 다음을 사용할 수 있습니다.

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

PowerShell 3.0(윈도우즈 8 사전 설치)부터는 다음을 사용할 수 있습니다.

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에 설치할 수 있습니다.)

BITS라는 표준 Windows 구성 요소를 사용하면 원하는 작업을 수행할 수 있습니다.XP 및 2000 SP3 이후로 Windows에 포함되어 있습니다.

실행:

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

작업 이름은 단순히 다운로드 작업의 표시 이름입니다. 현재 작업을 설명하는 이름으로 설정합니다.

이것은 약간 주제에서 벗어난 것일 수 있지만 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)

마지막으로 확인해보니 MS 명령줄에서 URL로 연결할 명령줄 명령어가 없습니다.Windows용 wget을 사용해 보십시오.
http://gnuwin32..net/packages/wget.htmhttp ://gnuwin32.sourceforge.net/packages/wget.htm

URL2File "URL2":
http://www.chami.com/free/.htmlhttp ://www.chami.com/free/url2file_wincon.html

Linux에서는 "wget"을 사용할 수 있습니다.

또는 VBScript를 사용해 볼 수 있습니다.명령줄 프로그램과 비슷하지만 wscript로 해석되는 스크립트입니다.exe 스크립트 호스트.다음은 VBS를 사용하여 파일을 다운로드하는 예입니다.
https://serverfault.com/questions/29707/://serverfault.com/questions/29707/download-file-from-vbscript

PURE BATCH에서 파일을 다운로드하는 중...JScript, VBScript, Powershell 등이 없는 경우... 순수 배치만!

JScript나 VBScript 등을 사용하지 않고 배치 스크립트로 파일을 다운로드할 수 없다는 의견도 있습니다.하지만 그들은 확실히 틀렸습니다!

다음은 배치 스크립트에서 파일을 다운로드하는 데 매우 효과적인 간단한 방법입니다.거의 모든 파일의 URL에서 작동해야 합니다.필요한 경우 프록시 서버를 사용할 수도 있습니다.

파일 다운로드는 BITSADMIN을 사용할 수 있습니다.윈도우즈 시스템에서 EXE로 이동합니다.JScript 또는 VBScript 등을 다운로드/설치하거나 사용할 필요가 없습니다.비트 관리자.exe는 XP에서 Windows 10까지 대부분의 Windows 버전에 있습니다.

맛있게 드세요!


용도:

다음과 같이 BITSADMIN 명령을 직접 사용할 수 있습니다.
bitsadmin /transfer mydownloadjob /download /priority FOREGROUND "http://example.com/File.zip" "C:\Downloads\File.zip"

프록시 서버:
프록시를 사용하여 연결하는 경우 다운로드하기 전에 이 명령을 사용합니다.
bitsadmin /setproxysettings mydownloadjob OVERRIDE "proxy-server.com:8080"

BITSadmin에 대한 자세한 정보를 보려면 이 링크를 클릭합니다.exe


해결 문제 해결:
하면 "connect to -0x80070422"라는 메시지가 표시됩니다.
Windows "BITS(Background Intelligent Transfer Service)"는 "BITSBackground Intelligent Transfer Service)"입니다 (.)(기본적으로 활성화되어 있어야 합니다.)


사용자 정의 기능
Call :DOWNLOAD_FILE "URL"
Call :DOWNLOAD_PROXY_ON "SERVER:PORT"
Call :DOWNLOAD_PROXY_OFF

저는 bitsadmin 명령을 단순화하기 위해 이 세 가지 기능을 만들었습니다.사용하기 쉽고 기억하기 쉽습니다.스크립트에서 여러 번 사용하는 경우 특히 유용할 수 있습니다.

참고하시기 바랍니다.
이러한 함수를 사용하기 전에 먼저 CUSTOM_FUNCTION.CMD에서 스크립트 끝으로 이 함수를 복사해야 합니다. 다운로드-EXAMPLE.CMD도 있습니다.

:DOWNLOAD_FILE "URL"
주요 기능은 URL에서 파일을 다운로드합니다.

:DOWNLOAD_PROXY_ON "SERVER:PORT"
(선택사항) 프록시 서버를 사용해야 하는 경우 이 기능을 사용할 수 있습니다.
: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_FUNCTION.CMD

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

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

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

다운로드-예시.CMD

@ECHO OFF
SETLOCAL

rem FOR DOWNLOADING FILES, 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 URL (5MB TEST FILE):
SET "FILE_URL=http://ipv4.download.thinkbroadband.com/5MB.zip"

rem SAVE IN CUSTOM LOCATION:
rem SET "SAVING_TO=C:\Folder\5MB.zip"

rem SAVE IN THE CURRENT DIRECTORY
SET "SAVING_TO=5MB.zip"
SET "SAVING_TO=%~dp0%SAVING_TO%"

:MAIN

ECHO.
ECHO DOWNLOAD SCRIPT EXAMPLE
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 THE MAIN DOWNLOAD COMMAND:
CALL :DOWNLOAD_FILE "%FILE_URL%" "%SAVING_TO%"

rem UNCOMMENT NEXT LINE FOR DISABLING THE PROXY (IF YOU USED IT):
rem CALL :DOWNLOAD_PROXY_OFF

:RESULT
ECHO.
IF EXIST "%SAVING_TO%" ECHO YOUR FILE HAS BEEN SUCCESSFULLY DOWNLOADED.
IF NOT EXIST "%SAVING_TO%" ECHO ERROR, YOUR FILE COULDN'T BE DOWNLOADED.
ECHO.

:EXIT_SCRIPT
PAUSE
EXIT /B




rem FUNCTIONS SECTION


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

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

:DOWNLOAD_PROXY_OFF
    rem FUNCTION FOR STOP USING A PROXY SERVER:
    bitsadmin /setproxysettings mydownloadjob NO_PROXY
GOTO :EOF
' 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에서 테스트할 수 있습니다.

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

자세한 설명은 여기에 있습니다.

윈도우 10의 빌드 17063과 함께 CURL 유틸리티가 추가되었습니다.파일을 다운로드하려면 다음을 사용합니다.

curl "https://download.sysinternals.com/files/PSTools.zip" --output pstools.zip

BITSADMIN

매크로와 함께 bitsadmin을 사용하는 것이 더 쉬울 수 있습니다.

set "download=bitsadmin /transfer myDownloadJob /download /priority normal"
%download% "https://download.sysinternals.com/files/PSTools.zip" %cd%\pstools.zip

Winhttp com 객체

이전 버전과의 호환성을 위해 winhttpjs.bat을 사용할 수 있습니다(이 경우 POST, DELETE 및 기타 http 메서드도 수행할 수 있습니다).

call winhhtpjs.bat "https://example.com/files/some.zip" -saveTo "c:\somezip.zip" 
  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. 파일을 실행하여 이익을 얻으십시오!

xcopy over http는 사용할 수 없습니다.wget for windows를 다운로드해 보십시오.그것이 효과가 있을지도 모릅니다.이것은 http를 통한 비인터랙티브 파일 다운로드를 위한 명령줄 유틸리티입니다.http://gnuwin32.sourceforge.net/packages/wget.htm 에서 구입할 수 있습니다.

bitsadmin이 마음에 들지 않으면 다음 PowerShell 명령을 사용할 수 있습니다.

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

배트를 사용하여 변환기 실행

아래 것을 .

%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로 변환합니다.

wget 대신 aria2를 사용하여 특정 URL에서 파일을 다운로드할 수도 있습니다.

aria2에 대해 자세히 설명하는 다음 링크를 참조하십시오.

https://aria2.github.io/

윈도우즈에는 CMD에서 실행할 수 있는 유틸리티(CMD에 상주)가 있습니다(쓰기 액세스 권한이 있는 경우).

set url=https://www.nsa.org/content/hl-images/2017/02/09/NSA.jpg
set file=file.jpg
certutil -urlcache -split -f %url% %file%
echo Done.

기본 제공되는 Windows 응용 프로그램입니다.외부 다운로드가 필요 없습니다.

Win 10에서 테스트됨

BATCH에서는 이 작업을 수행할 수 없지만 Windows에 기본적으로 설치되지 않은 도구를 사용하지 않으려면 JScript 또는 VBScript를 사용할 수 있습니다.

이 페이지의 첫 번째 예는 VBScript의 이진 파일을 다운로드합니다. http://www.robvanderwoude.com/vbstech_internet_download.php

다음 SO 응답은 JScript(IMO, 더 나은 언어)를 사용하여 파일을 다운로드합니다.Windows 스크립트 호스트(jscript): 이진 파일을 다운로드하려면 어떻게 해야 합니까?

그런 다음 배치 스크립트를 파일을 다운로드하는 JScript 또는 VBScript로 호출할 수 있습니다.

이것이 효과가 있을 것입니다. 게임 서버 프로젝트를 위해 다음과 같이 했습니다.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

다음 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

이 질문은 매우 좋은 답을 가지고 있습니다.제 코드는 약간의 수정이 있는 순수한 답변을 기반으로 합니다.

아래 스니펫을 wget.bat로 저장하고 시스템 경로에 넣습니다(예: 디렉토리에 저장하고 이 디렉토리를 시스템 경로에 추가합니다).

CLI에서 다음과 같이 사용할 수 있습니다.

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

추신: 이 코드를 사용하려면 PowerShell을 설치해야 합니다.

wget을 사용하여 스케줄링된 작업을 설정할 수 있으며 스케줄링된 작업의 "실행" 필드를 다음과 같이 사용합니다.

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

ftp 사용:

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

모든 항목을 상황에 맞게 별표로 변경합니다.

언급URL : https://stackoverflow.com/questions/4619088/windows-batch-file-file-download-from-a-url