ไฟล์แบตช์ Windows ดาวน์โหลดจาก URL


113

ฉันพยายามดาวน์โหลดไฟล์จากเว็บไซต์ (เช่นhttp://www.example.com/package.zip ) โดยใช้ไฟล์แบตช์ของ Windows ฉันได้รับรหัสข้อผิดพลาดเมื่อฉันเขียนฟังก์ชันด้านล่าง:

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

ไฟล์แบตช์ดูเหมือนจะไม่ชอบ "/" หลัง http มีวิธีใดบ้างที่จะหลีกเลี่ยงอักขระเหล่านั้นเพื่อไม่ให้ถือว่าเป็นพารามิเตอร์ของฟังก์ชัน


ที่นี่: stackoverflow.com/questions/28143160/…ฉันได้พยายามกลับมาใช้งานวิธีดาวน์โหลดไฟล์ใน Windows โดยใช้เครื่องมือเฉพาะที่ไม่มีซอฟต์แวร์ของบุคคลที่สาม
npocmaka

คำตอบ:


137

ด้วย 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
เย็น! ดีกว่า bitsadmin.exe เนื่องจากไม่ได้เลิกใช้งาน
sinelaw

@sevenforce คำสั่ง Powershell 2.0 ยังทำงานใน Powershell 3.0 ได้หรือไม่หรือคุณต้องใช้ไวยากรณ์ของ Powershell 3.0
Rich Signell

4
@RichSignell: คำสั่ง 2.0 ยังทำงานใน 3.0 สำหรับคำสั่ง 2.0 ที่ฉันสังเกตเห็นว่าสำหรับเส้นทางเป้าหมายที่ไม่ใช่แบบสัมบูรณ์ไฟล์จะถูกบันทึกโดยสัมพันธ์กับโฟลเดอร์บ้านของผู้ใช้
sevenforce

1
สิ่งนี้ช่างมหัศจรรย์. ฉันมองหาสิ่งนี้มานานแล้ว ขอบคุณ! ยังคงใช้งานได้ในปี 2560
Albert MN

2
รหัส 2.0 ใช้งานได้สำหรับฉันใน Win 7 ที่เป็นปัจจุบันและเนื่องจากมันยังใช้งานได้โดยไม่ต้องให้สิทธิ์ผู้ดูแลระบบ PowerShell ปล่อยให้สิ่งนี้เป็นหลักฐานยืนยันแนวคิดที่สมบูรณ์แบบว่าการคลิกที่ไม่รู้จัก.batและ.ps1ไฟล์สามารถทำให้เนื้อหาของคุณเสียหายได้
1934286

97

มีส่วนประกอบมาตรฐานของ Windows ซึ่งสามารถบรรลุสิ่งที่คุณกำลังพยายามที่จะทำคือ: BITS รวมอยู่ใน Windows ตั้งแต่ XP และ 2000 SP3

วิ่ง:

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

ชื่องานเป็นเพียงชื่อที่แสดงสำหรับงานดาวน์โหลด - ตั้งเป็นชื่อที่อธิบายถึงสิ่งที่คุณกำลังทำ


14
เครื่องมือที่ดี! แต่ win8 ของฉันบอกว่า: "BITSAdmin เลิกใช้งานแล้วและไม่รับประกันว่าจะพร้อมใช้งานใน Windows เวอร์ชันอนาคตขณะนี้เครื่องมือการดูแลระบบสำหรับบริการ BITS มีให้โดย BITS PowerShell cmdlets"
Peteter

1
ดังที่ฉันได้กล่าวไปแล้ว bitsadmin ไม่ทำงานในแบทช์อัตโนมัติที่รันจากตัวกำหนดตารางเวลางาน :(
TomeeNS

1
@cmroanirgo bitsadminไม่มีใน Windows XP Home Edition
แบบลดหลั่น

1
ยังคงแข็งแกร่งใน Windows 10 Pro
Orwellophile

3
ขอบคุณ! ทำงานได้อย่างมีเสน่ห์บนคอมพิวเตอร์ที่ติดไวรัสโดยไม่มีวิธีอื่นที่เป็นไปได้ในการดาวน์โหลดไฟล์จากเว็บ (แม้แต่ powershell ก็ไม่สามารถเปิดตัวได้)
szab.kel

29

นี้อาจจะมีเล็กน้อยปิดหัวข้อ แต่คุณสามารถสวยได้อย่างง่ายดายดาวน์โหลดไฟล์โดยใช้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)

2
หากคุณค้นหาบล็อกนั้นมีตัวอย่าง
พาวเวอร์เชลล์

ฉันไม่คิดว่าคุณต้องการSystemในSystem.Net.WebClient
1934286

25

ล่าสุดฉันตรวจสอบไม่มีคำสั่งบรรทัดคำสั่งที่จะเชื่อมต่อกับ 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:
/server/29707/download-file-from-vbscript


2
คุณไม่จำเป็นต้องใช้ wget หรือการผสานรวมของบุคคลที่สาม BITS (คอมโพเนนต์ Windows มาตรฐานตั้งแต่ XP) สามารถทำได้ด้วยยูทิลิตี้ bitsadmin จากบรรทัดคำสั่ง MS โพสต์คำตอบแล้ว - แม้ว่าจะช้าไปหน่อย (2 ปีที่แล้ว?)
Brainwood

18

กำลังดาวน์โหลดไฟล์ใน PURE BATCH ...

ไม่มี JScript, VBScript, Powershell และอื่น ๆ ... เฉพาะ Batch ที่บริสุทธิ์เท่านั้น!

บางคนบอกว่าไม่สามารถดาวน์โหลดไฟล์ด้วย batch script ได้โดยไม่ต้องใช้ JScript หรือ VBScript และอื่น ๆ ... แต่พวกมันผิดแน่นอน!

นี่คือวิธีง่ายๆที่ดูเหมือนจะใช้ได้ดีสำหรับการดาวน์โหลดไฟล์ในสคริปต์แบตช์ของคุณ ควรใช้งานได้กับ URL ของไฟล์เกือบทุกประเภท เป็นไปได้ที่จะใช้พร็อกซีเซิร์ฟเวอร์หากคุณต้องการ

สำหรับการดาวน์โหลดไฟล์เราสามารถใช้BITSADMIN.EXEจากระบบ Windows ไม่จำเป็นต้องดาวน์โหลด / ติดตั้งอะไรหรือใช้ JScript หรือ VBScript ใด ๆ เป็นต้นBitsadmin.exeมีอยู่ใน Windows เกือบทุกรุ่นอาจใช้ตั้งแต่ XP ถึง Windows 10

สนุก!


การใช้:

คุณสามารถใช้คำสั่ง BITSADMIN ได้โดยตรงดังนี้:
bitsadmin /transfer mydownloadjob /download /priority FOREGROUND "http://example.com/File.zip" "C:\Downloads\File.zip"

พร็อกซีเซิร์ฟเวอร์:
สำหรับการเชื่อมต่อโดยใช้พร็อกซีให้ใช้คำสั่งนี้ก่อนดาวน์โหลด
bitsadmin /setproxysettings mydownloadjob OVERRIDE "proxy-server.com:8080" "<local>"

คลิกที่นี่LINKถ้าคุณต้องการข้อมูลเพิ่มเติมเกี่ยวกับ BITSadmin.exe


การแก้ไขปัญหา:
หากคุณได้รับข้อผิดพลาดนี้: "ไม่สามารถเชื่อมต่อกับ BITS - 0x80070422"
ตรวจสอบว่าได้เปิดใช้บริการ windows "Background Intelligent Transfer Service (BITS)" แล้วลองอีกครั้ง (ควรเปิดใช้งานตามค่าเริ่มต้น)


ฟังก์ชั่นที่กำหนดเอง
Call :DOWNLOAD_FILE "URL"
Call :DOWNLOAD_PROXY_ON "SERVER:PORT"
Call :DOWNLOAD_PROXY_OFF

ฉันสร้าง 3 ฟังก์ชันนี้เพื่อลดความซับซ้อนของคำสั่ง bitsadmin ใช้งานและจดจำได้ง่ายขึ้น จะมีประโยชน์อย่างยิ่งหากคุณใช้งานหลายครั้งในสคริปต์ของคุณ

โปรดทราบ ...
ก่อนที่จะใช้ฟังก์ชันเหล่านี้คุณจะต้องคัดลอกจาก CUSTOM_FUNCTIONS.CMD ไปยังส่วนท้ายของสคริปต์ของคุณก่อน นอกจากนี้ยังมีตัวอย่างที่สมบูรณ์: DOWNLOAD-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_FUNCTIONS.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 "<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 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 "<local>"
GOTO :EOF

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

1
ฉันเพิ่งอัปเดตคำตอบของฉัน ... เห็นได้ชัดว่าความเร็วในการดาวน์โหลดช้ามากฉันจึงเปลี่ยนพารามิเตอร์จาก "/ priority normal" เป็น "/ ลำดับความสำคัญเบื้องหน้า" และได้รับการแก้ไขปัญหา ตอนนี้ควรใช้แบนด์วิดท์ที่มีอยู่ 100% (แทนที่จะเป็น ~ 5%)
Frank Einstein

11
' 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


1
นี่เป็นการดาวน์โหลดลงในหน่วยความจำเท่านั้นและยังไม่ได้เขียนลงไฟล์ ตรวจสอบคำตอบนี้เพื่อดาวน์โหลดเป็นไฟล์: stackoverflow.com/a/2973344/977804
Daniel

5

AFAIK, Windows ไม่มีเครื่องมือ commandline ในตัวสำหรับดาวน์โหลดไฟล์ แต่คุณสามารถทำได้จาก 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

คำอธิบายเพิ่มเติมที่นี่


มีเหตุผลใดที่จะไม่ทำสิ่งนี้ในไฟล์แยกต่างหากและเพียงแค่เรียกไฟล์ VBScript จากแบตช์? นี่จะเป็นเรื่องยุ่งยากมากหากคุณจำเป็นต้องแก้ไข
seadoggie01

4
  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

คุณไม่สามารถใช้ xcopy ผ่าน http ลองดาวน์โหลด wget สำหรับ windows ที่อาจทำเคล็ดลับ เป็นยูทิลิตี้บรรทัดคำสั่งสำหรับการดาวน์โหลดไฟล์แบบไม่โต้ตอบผ่าน http สามารถดาวน์โหลดได้ที่http://gnuwin32.sourceforge.net/packages/wget.htm


3

หาก bitsadmin ไม่ใช่ถ้วยชาของคุณคุณสามารถใช้คำสั่ง PowerShell นี้:

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

ฉันต้องการดาวน์โหลด. exe และฉันก็ใช้รหัสนี้และไม่ได้ผล .. ฉันสามารถดาวน์โหลด. exe โดยใช้ batch script ได้หรือไม่?
มาส. จอห์น

3

ใช้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


3

แทนที่จะใช้ wget คุณยังสามารถใช้ aria2 เพื่อดาวน์โหลดไฟล์จาก URL เฉพาะได้

ดูลิงค์ต่อไปนี้ซึ่งจะอธิบายเพิ่มเติมเกี่ยวกับ aria2:

https://aria2.github.io/


+1 สำหรับการกล่าวถึงเครื่องมือนี้ที่ฉันยังไม่รู้จัก แย่เกินไปที่มีปัญหากับ HTTPS เช่น wget มี (ยังไม่พบวิธีตั้งค่า CA chain เลย)
Jeroen Wiert Pluimers

2

BATCH อาจไม่สามารถทำได้ แต่คุณสามารถใช้ JScript หรือ VBScript ได้หากคุณไม่ต้องการใช้เครื่องมือที่ไม่ได้ติดตั้งตามค่าเริ่มต้นกับ Windows

ตัวอย่างแรกในหน้านี้ดาวน์โหลดไฟล์ไบนารีใน VBScript: http://www.robvanderwoude.com/vbstech_internet_download.php

คำตอบ SO นี้ดาวน์โหลดไฟล์โดยใช้ JScript (IMO ซึ่งเป็นภาษาที่ดีกว่า): Windows Script Host (jscript): ฉันจะดาวน์โหลดไฟล์ไบนารีได้อย่างไร

สคริปต์แบตช์ของคุณสามารถเรียกใช้ JScript หรือ VBScript ที่ดาวน์โหลดไฟล์


2

สิ่งนี้ควรได้ผลฉันทำสิ่งต่อไปนี้สำหรับโครงการเซิร์ฟเวอร์เกม มันจะดาวน์โหลด 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


ฉันต้องการดาวน์โหลด. exe และใช้รหัสนี้แล้วไม่ได้ผล .. ฉันสามารถดาวน์โหลด. exe โดยใช้ batch script ได้หรือไม่?
มาส. John

1

ฉันพบสคริปต์ 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

คำถามนี้มีคำตอบที่ดีมากในการที่นี่ รหัสของฉันขึ้นอยู่กับคำตอบนั้นโดยมีการปรับเปลี่ยนบางอย่าง

บันทึกข้อมูลโค้ดด้านล่างเป็นwget.batและวางไว้ในเส้นทางระบบของคุณ (เช่นวางไว้ในไดเร็กทอรีและเพิ่มไดเร็กทอรีนี้ในเส้นทางระบบ)

คุณสามารถใช้ได้ใน cli ของคุณดังนี้:

wget url/to/file [?custom_name]

ซึ่งurl_to_fileเป็นภาคบังคับและcustom_nameเป็นทางเลือก

  1. หากไม่ได้ระบุชื่อไฟล์ที่ดาวน์โหลดจะถูกบันทึกโดยใช้ชื่อของมันเองจาก url
  2. หากมีการระบุชื่อไฟล์จะถูกบันทึกโดยชื่อใหม่

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

ปล. รหัสนี้กำหนดให้คุณต้องติดตั้ง PowerShell


1

คุณสามารถตั้งค่างานตามกำหนดเวลาโดยใช้ wget ใช้ฟิลด์“ Run” ในงานที่กำหนดเวลาไว้เป็น:

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

1

มียูทิลิตี้ (อยู่กับ CMD) บน Windows ซึ่งสามารถเรียกใช้จาก 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


-3

ใช้ ftp:

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

เปลี่ยนทุกอย่างด้วยเครื่องหมายดอกจันเพื่อให้เข้ากับสถานการณ์ของคุณ


ต้องพึ่งพาเซิร์ฟเวอร์ที่โฮสต์ไฟล์เพื่อรองรับ FTP อย่างแน่นอน
PnP

Questin เกี่ยวข้องกับ http ไม่ใช่ ftp
Ben
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.