วิธีดาวน์โหลดไฟล์จากบรรทัดคำสั่งใน Windows เช่น wget หรือ curl


348

ฉันจะดาวน์โหลดบางสิ่งจากเว็บได้โดยตรงโดยไม่ต้องเปิด Internet Explorer หรือ Firefox เปิดโปรแกรม Acrobat Reader / Quicktime / MS Word / อะไร?

ฉันใช้ Windows ดังนั้นWgetรุ่น Windows จะทำอย่างไร


เพียงคลิกขวาที่ไฟล์และกดปุ่ม "บันทึกเป้าหมายเป็น" หรือ "บันทึกลิงก์เป็น" หรือ "บันทึกเป็น" (ภาษาจะแตกต่างกันขึ้นอยู่กับเบราว์เซอร์ของคุณ) จะทำงาน
BrainSlugs83

25
จุดที่มีคำสั่งคือความสามารถในการเขียนไฟล์แบทช์และเรียกใช้ (อาจจัดตารางเวลาเป็นงาน) ได้ทุกเวลาที่คุณต้องการ นั่นคือสิ่งที่ GUI สั้นลง
Jbm

4
คุณดาวน์โหลดด้วย MS Word ได้อย่างไร
Jaime Hablutzel

5
@JaimeHablutzel ทำไมคุณถึงต้องการดาวน์โหลดบางอย่างผ่าน MS Word MS Word ไม่ใช่เทอร์มินัล
Braden ที่ดีที่สุด

1
@SDsolar หรือเพียงโหวต / ปรับปรุงคำตอบนี้ด้านล่าง
Franklin Yu

คำตอบ:


180

Wget สำหรับ Windowsควรใช้งานได้

จากคำถามที่พบบ่อย Wget Wiki :

GNU Wget เป็นยูทิลิตี้เครือข่ายฟรีในการดึงไฟล์จากเวิลด์ไวด์เว็บโดยใช้ HTTP และ FTP ซึ่งเป็นโปรโตคอลอินเทอร์เน็ตที่ใช้กันอย่างแพร่หลายที่สุดสองตัว มันทำงานแบบไม่โต้ตอบซึ่งทำให้สามารถทำงานในพื้นหลังหลังจากออกจากระบบ

จากส่วนของคำถามที่พบบ่อยนี้แนะนำให้ดาวน์โหลดลิงค์:

Windows ไบนารี

ใช้ลิงค์กับมารยาทของ Jernej Simončičแทน


9
นอกจากนี้ยังมี Winwget cybershade.us/winwgetหากคุณต้องการ GUI
Col

13
รุ่นสแตนด์อโลนสามารถดาวน์โหลดได้จากลิงค์นี้
Vito Gentile

5
ล่าสุดแม้กระทั่งเป็นปัจจุบัน (ณ วันนี้) Windows buildsจัดหาให้โดย Jernej Simončič
Gras Double

1
@cixelsyd อัปเดตลิงก์ไปยังแหล่งข้อมูลอื่น
clearkimura

1
eternallybored.org/misc/wget/ ถูกตั้งค่าสถานะโดยโปรแกรมป้องกันไวรัสระดับองค์กรในระบบของฉัน Carbon Black / Bit 9. อาจเป็นค่าบวกปลอม แต่ sourceforge หนึ่งทำงาน ไม่รองรับ sslv3
TamusJRoyce

311

ทางเลือกที่ฉันค้นพบเมื่อเร็ว ๆ นี้โดยใช้ PowerShell:

$client = new-object System.Net.WebClient
$client.DownloadFile("http://www.xyz.net/file.txt","C:\tmp\file.txt")

มันทำงานได้ดีกับคำสั่ง GET

หากคุณต้องการระบุข้อมูลประจำตัวเพื่อดาวน์โหลดไฟล์ให้เพิ่มบรรทัดต่อไปนี้ระหว่าง:

$client.Credentials =  Get-Credential                

พรอมต์ข้อมูลประจำตัวของ windows มาตรฐานจะปรากฏขึ้น ข้อมูลประจำตัวที่คุณป้อนจะถูกใช้เพื่อดาวน์โหลดไฟล์ คุณจะต้องทำสิ่งนี้เพียงครั้งเดียวตลอดเวลาที่คุณจะใช้วัตถุ $ client


91
คุณสามารถทำได้ในบรรทัดเดียว:(new-object System.Net.WebClient).DownloadFile('http://www.xyz.net/file.txt','C:\tmp\file.txt')
schellack

16
@ Rob PowerShell สร้างขึ้นใน Windows ...
nhinkle

9
ตั้งแต่ Vista ขึ้นไปใช่
Arran

3
@ BrainSlugs83 แน่นอน แต่หลาย ๆ คนหลาย ๆคนยังคงใช้ XP เป็นเพียงสิ่งที่ต้องคำนึงถึง
Arran

4
@ BrainSlugs83 คุณดูถูกดูแคลนจำนวนคนที่ยังคงใช้ระบบ Windows รุ่นเก่า ฉันไม่เข้าใจปัญหาฉันชี้ให้เห็นว่าเป็นเฉพาะใน Vista ขึ้นไป ผู้คนสามารถเลือกที่จะเพิกเฉยหรือพูดว่า "เฮ้ขอบคุณ!" แต่คุณ .... หากคุณมีปัญหาสร้างการแชทและเราสามารถพูดคุย คนที่มีตัวแทน (เช่นคุณ) ควรตระหนักว่าที่นี่ไม่ใช่สถานที่สำหรับการสนทนานี้
Arran

83

หากคุณมี PowerShell> = 3.0 คุณสามารถใช้ Invoke-WebRequest

Invoke-WebRequest -OutFile index.html http://superuser.com

หรือตีกอล์ฟ

iwr -outf index.html http://superuser.com

ดาวน์โหลดไฟล์ผ่าน HTTP ใน Windows


นี้ไม่ได้ทำงานกับการเปลี่ยนเส้นทางบน SourceForge (และเว็บไซต์อื่น ๆ อาจจะ) System.Net.WebClientเมื่อเทียบกับ แต่คุณสามารถทำให้การทำงานโดยการเพิ่มInvoke-WebRequest -UserAgent [Microsoft.PowerShell.Commands.PSUserAgent]::FireFox
Ela782

มีตัวเลือกเพื่อดูความคืบหน้าของการดาวน์โหลดหรือไม่?
Franklin Yu

@ FranklinYu ความคืบหน้าจะแสดงถ้าไฟล์มีขนาดใหญ่พอ
Steven Penny

มีตัวเลือกที่จะไม่ได้ระบุ OUTFILE แต่ยังคงประหยัด (ชอบwgetหรือcurl -O, curl --remote-nameหรือcurl -J?)
Tomasz Gandor

60

Windows มียูทิลิตี้ดาวน์โหลดบรรทัดคำสั่งของตัวเอง - BITSAdmin :

BITSAdmin เป็นเครื่องมือบรรทัดคำสั่งที่คุณสามารถใช้เพื่อสร้างการดาวน์โหลดหรืออัพโหลดงานและติดตามความคืบหน้าของพวกเขา

แก้ไข : 26.01.15 - นี่คือภาพรวมของฉันของวิธีการดาวน์โหลดไฟล์บน windows โดยไม่ต้องใช้เครื่องมือภายนอก

และตัวอย่าง bitsadmin ที่สมบูรณ์:

bitsadmin /transfer myDownloadJob /download /priority normal http://downloadsrv/10mb.zip c:\10mb.zip

แก้ไข : 15.05.2018 - เปิดออกที่เป็นไปได้ในการดาวน์โหลดไฟล์ที่มีประกาศนียบัตรเช่นกัน:

certutil.exe -urlcache -split -f "https://download.sysinternals.com/files/PSTools.zip" pstools.zip

Certutil ไม่ได้ติดตั้งเป็นค่าเริ่มต้นใน XP / Win2003 แต่มีให้ใช้งานบน Windows รุ่นใหม่กว่าสำหรับ XP / 2003 คุณจะต้องใช้ชุดเครื่องมือผู้ดูแลระบบสำหรับ Windows Server 2003


7
น่าสนใจ นั่นคือหนึ่งชิ้นส่วนซอฟต์แวร์ที่เงอะงะเมื่อเทียบกับ wget
Matt H

2
โปรดทราบว่ามันไม่ได้มาพร้อมกับ Windows XP และอาจไม่ได้มีรุ่นอื่นด้วย
Ian Dunn

12
อัปเดต: BITSAdmin เลิกใช้แล้วและไม่รับประกันว่าจะมีใน Windows รุ่นอนาคต เครื่องมือการจัดการสำหรับบริการ BITS ขณะนี้มีให้โดย BITS PowerShell cmdlets
nulldev07

2
@ MattH: เพราะมันไม่ควรที่จะถูกวางในตอนแรก? - ดูen.wikipedia.org/wiki/Background_Intelligent_Transfer_Service
peterchen

4
ไม่สามารถเพิ่มไฟล์ - 0x80070057
Tomáš Zato

32

บันทึกข้อความต่อไปนี้เป็นwget.jsและเพียงแค่โทร

cscript /nologo wget.js http://example.com

นี่คือรหัส:

var WinHttpReq = new ActiveXObject("WinHttp.WinHttpRequest.5.1");
WinHttpReq.Open("GET", WScript.Arguments(0), /*async=*/false);
WinHttpReq.Send();
WScript.Echo(WinHttpReq.ResponseText);

/* To save a binary file use this code instead of previous line
BinStream = new ActiveXObject("ADODB.Stream");
BinStream.Type = 1;
BinStream.Open();
BinStream.Write(WinHttpReq.ResponseBody);
BinStream.SaveToFile("out.bin");
*/

สคริปต์นี้มีภาษาอะไรดูมีประโยชน์กับงานปัจจุบันของฉัน ฉันต้องการค้นหาเอกสารอ้างอิงเพิ่มเติม ดูไม่เหมือน vb
G-

1
มีประโยชน์สำหรับไฟล์เดียว ต้องการการปรับปรุงสำหรับการดาวน์โหลดแบบเรียกซ้ำและ https
opticyclic

4
@ G- ฉันมาปาร์ตี้ช้า แต่นั่นคือจาวาสคริปต์
prooffreader

ฉันพยายามทำเช่นนั้นสำหรับdatabase.clamav.net/daily.cvdแต่ดาวน์โหลดเพียง 88kB จาก 44MB :(
kokbira

22

มีม้วนพื้นเมืองสำหรับ Windows ที่มีอยู่ที่นี่ มีหลายรสชาติให้เลือกทั้งแบบมีและไม่มีการรองรับ SSL

คุณไม่ต้องการสัมภาระเพิ่มของCygwinและไลค์ไฟล์ EXE ขนาดเล็กเพียงไฟล์เดียว


สิ่งสำคัญคือต้องรู้ว่ามีทั้งwgetและcurlนามแฝงที่สร้างขึ้นใน Windows Powershell รุ่นทันสมัยทั้งหมด พวกเขาเทียบเท่า

ไม่จำเป็นต้องใช้ไฟล์หรือดาวน์โหลดเพิ่มเติมเพื่อรับwgetฟังก์ชั่นการทำงาน:

การใช้ Curl In Powershell (The Sociable Geek)

ข้อความที่ตัดตอนมา:

คุณสามารถพิมพ์คำสั่ง cURL เหมือนที่ดาวน์โหลดไฟล์จากที่เก็บ GitHub

curl http://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/mongodb-on-ubuntu/azuredeploy.json

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

นามแฝงใน PowerShell ช่วยให้คุณสร้างทางลัดสำหรับคำสั่งที่ยาวกว่าดังนั้นคุณไม่จำเป็นต้องพิมพ์คำสั่งเหล่านั้นออกตลอดเวลา

หากคุณพิมพ์คำสั่ง Get-Alias ​​คำสั่งจะแสดงรายการนามแฝงทั้งหมดที่ใช้ใน PowerShell อย่างที่คุณเห็นคำสั่ง curl จะเรียกคำสั่ง Invoke-WebRequest พวกเขาเหมือนกัน แต่ไม่เหมือนกันซึ่งเป็นสาเหตุที่คำขอข้างต้นไม่ได้ผลสำหรับเรา

ป้อนคำอธิบายรูปภาพที่นี่

เพื่อให้สิ่งนี้ทำงานได้อย่างถูกต้องใน PowerShell วิธีที่ง่ายที่สุดคือการใช้ตัวแปรและ-OutFileอาร์กิวเมนต์ตามที่แสดงไว้ที่นี่:

ป้อนคำอธิบายรูปภาพที่นี่

(ชื่อไฟล์ถูกตัดในภาพ“ https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/mongodb-on-ubuntu/azuredeploy.json ”)

ไวยากรณ์นี้จะดาวน์โหลดเนื้อหาทั้งหมดของไฟล์เป้าหมายazuredeploy.jsonไปยังไฟล์โลคอลnewfile.json


ข้อได้เปรียบหลักคือมันสร้างไว้ใน Powershell เองดังนั้นโค้ดนี้จะทำงานโดยตรงโดยไม่ต้องดาวน์โหลดหรือต้องมีการสร้างไฟล์เพิ่มเติมอื่น ๆ เพื่อให้มันทำงานบน Windows รุ่นที่ทันสมัย


สิ่งนี้สามารถทำได้โดยตรงในหนึ่งบรรทัด แต่เส้นนั้นค่อนข้างยาวและไม่สามารถอ่านได้ทันที
SDsolar

21

ฉันสร้างไฟล์ myGet.bat อย่างรวดเร็วซึ่งเรียกเมธอด PowerShell ตามที่อธิบายไว้ข้างต้น

@Echo OFF
SetLocal EnableDelayedExpansion
Set Var=%1
Set Var=!Var:http://=!
Set Var=!Var:/=,!
Set Var=!Var:%%20=?!
Set Var=!Var: =?!
Call :LOOP !var!
Echo.Downloading: %1 to %~p0!FN!
powershell.exe -Command (new-object System.Net.WebClient).DownloadFile('%1','%~p0!FN!')
GoTo :EOF
:LOOP
If "%1"=="" GoTo :EOF
Set FN=%1
Set FN=!FN:?= !
Shift
GoTo :LOOP

ผมยืมรหัสจากการแยกวิเคราะห์ URL สำหรับชื่อไฟล์ที่มีพื้นที่


1
ทำไม downvote มันดูโอเคสำหรับฉันและเป็นการตอบคำถามโดยตรง ใช่มันเป็นเรื่องไร้สาระและสามารถใช้การปรับปรุงเช่นการใช้เครื่องหมายแอมเปอร์แซนด์ (&) ใน URL แต่ก็ใช้งานได้ตามปกติ
แมตต์วิลคี

การเขียนสคริปต์ PowerShell จะง่ายกว่าไหม?
SamB

1
powershell.exe -Command "Invoke-WebRequest -OutFile ./file-name https://location/file-name"<- การใช้งาน PowerShell หนึ่งบรรทัดอย่างง่าย ๆ ในการเข้ารหัสตำแหน่งไฟล์สคริปต์และชื่อไฟล์
James Eby

8

ฉันกำลังค้นหาสิ่งเดียวกันและเนื่องจากฉันไม่มีสิทธิ์ติดตั้งแพ็คเกจใด ๆ ข้างต้นฉันจึงหาวิธีแก้ปัญหาเล็ก ๆ (เพื่อดาวน์โหลด 30 + ไฟล์):

  • ฉันสร้างไฟล์แบตช์
  • รายการไฟล์ทั้งหมด
  • ใส่firefox.exeที่จุดเริ่มต้นของแต่ละบรรทัด
  • ไปที่ไดเรกทอรี firefox ใน Program Files
  • วิ่งเลย

4

หากPowerShellเป็นตัวเลือกนั่นเป็นเส้นทางที่ต้องการเนื่องจากคุณ (อาจ) ไม่ต้องติดตั้งอะไรเพิ่มเติม:

(new-object System.Net.WebClient).DownloadFile('http://www.xyz.net/file.txt', 'C:\tmp\file.tx??t')

ความล้มเหลวนั้น Wget สำหรับ Windows เนื่องจากคนอื่น ๆ ชี้ให้เห็นว่าเป็นตัวเลือกที่ดีที่สุดที่สองแน่นอน ขณะที่โพสต์ในคำตอบอื่นดูเหมือนว่าคุณสามารถดาวน์โหลด Wget ทั้งหมดด้วยตัวเองหรือคุณสามารถคว้ามันเป็นส่วนหนึ่งของCygwinหรือMSYS

หากด้วยเหตุผลบางอย่างคุณพบว่าตัวเองติดอยู่ในช่วงเวลาที่บิดเบี้ยวโดยใช้เครื่องที่ไม่มี PowerShell และคุณไม่มีสิทธิ์เข้าถึงเว็บเบราว์เซอร์ที่ใช้งานได้ (นั่นคือ Internet Explorer เป็นเบราว์เซอร์เดียวในระบบและการตั้งค่า เสียหาย) และไฟล์ของคุณอยู่บนไซต์ FTP (ตรงข้ามกับ HTTP):

start->run "FTP", press "OK".

หากหน่วยความจำให้บริการอยู่ที่นั่นตั้งแต่ Windows 98 และฉันสามารถยืนยันได้ว่ามันยังคงอยู่ใน Windows 8 RTM (คุณอาจต้องเข้าไปappwiz.cplและเพิ่ม / ลบคุณสมบัติเพื่อรับมัน) ยูทิลิตี้นี้สามารถดาวน์โหลดและอัพโหลดไฟล์ไปยัง / จากไซต์ FTP บนเว็บ นอกจากนี้ยังสามารถใช้ในสคริปต์เพื่อดำเนินการทั้งสองแบบอัตโนมัติ

เครื่องมือนี้เป็นเครื่องมือในตัวที่ช่วยชีวิตฉันได้จริงในอดีตโดยเฉพาะอย่างยิ่งในวันที่ ftp.cdrom.com - ฉันดาวน์โหลด Firefox ด้วยวิธีนี้ครั้งเดียวบนเครื่องที่เสียอย่างสมบูรณ์ที่มีอินเทอร์เน็ตผ่านสายโทรศัพท์เท่านั้น การเชื่อมต่อ (ย้อนกลับเมื่อขนาดแพ็คเก็ตสูงสุดของ sneakernet ยังคงเป็น 1.44 MB และ Firefox ยังคงถูกเรียกว่า "Netscape" / me ทำ trollface )

เคล็ดลับสองสามข้อ: เป็นหน่วยประมวลผลคำสั่งของตัวเองและมีไวยากรณ์ของตัวเอง ลองพิมพ์ "ช่วย" ไซต์ FTP ทั้งหมดต้องการชื่อผู้ใช้และรหัสผ่าน แต่ถ้าพวกเขาอนุญาตให้ผู้ใช้ "ไม่ระบุชื่อ" ชื่อผู้ใช้คือ "ไม่ระบุชื่อ" และรหัสผ่านคือที่อยู่อีเมลของคุณ (คุณสามารถสร้างขึ้นหากคุณไม่ต้องการที่จะถูกติดตาม แต่มักจะมีตรรกะบางอย่างเพื่อให้แน่ใจว่า ที่อยู่อีเมลที่ถูกต้อง)


+1 เมื่อคิดถึงบรรทัดคำสั่ง ftp! อย่างไรก็ตาม wget และ powershell ทั้งคู่พูดถึงกันก่อนที่คุณจะเข้าร่วมปาร์ตี้ดังนั้น -1 : - /
matt wilkie

คำตอบ powershell อื่น ๆ ที่ฉันเห็นคือ multi-liners และ / หรือมีกลิ่นรหัสบางอย่าง - นี่เป็นซับในแบบสั้นและง่ายในการดาวน์โหลดไฟล์ - นอกจากนี้ฉันต้องการที่จะให้คำตอบที่ครอบคลุมฐานทั้งหมด :-)
BrainSlugs83

1
ฉันไม่แน่ใจว่าทำไมคุณมีเครื่องหมายคำถามสองข้อในไฟล์ปลายทางC:\tmp\file.tx??t
Ploni



2

คุณสามารถใช้wgetแพ็คเกจใน PowerShellได้ ; ^) เพื่อเปิดกดปุ่ม Windows และพิมพ์ "powershell" หรือ Windows-R และพิมพ์ "powershell" และกดปุ่ม return

ไม่จำเป็นต้องติดตั้ง

ข้อแตกต่างที่น่าสนใจอย่างหนึ่งจากการใช้งานทั่วไปwget(มากกว่าที่ลิงค์นั้น ): คุณไม่สามารถใช้ไพพ์ยิ่งใหญ่กว่ากับไฟล์ได้ wgetใน PowerShell เป็นเพียงเครื่องมือห่อหุ้มสิ่งอำนวยความสะดวกสำหรับInvoke-WebRequestและคุณจำเป็นต้องใช้ไวยากรณ์เพื่อเขียนไปยังไฟล์

wget https://superuser.com/questions/25538 -OutFile rubySlippers.html

1
-OutFileทำผลงานได้!
Dimitry K

1

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


1

ฉันคิดว่าการติดตั้งwgetผ่าน Chocolatey เป็นวิธีที่ง่ายที่สุด

  1. ติดตั้งChocolatey
  2. จากบรรทัดคำสั่งพิมพ์: choco install wget
  3. จากนั้นคุณสามารถใช้wgetจากบรรทัดคำสั่งเช่นบนระบบ * nix

1

ค้นหาสำหรับ/downloadฟังก์ชั่นในhttps://lolbas-project.github.io

ตอนนี้มีBitsadmin.exe, Certutil.exe, Esentutl.exe, Expand.exe, Extrac32.exe, Findstr.exe, Hh.exe, Ieexec.exe, Makecab.exe, Replace.exeสำหรับ Windows Vista, Windows 7, Windows 8, Windows 8.1, Windows 10 และเทียบเท่ารุ่นเซิร์ฟเวอร์


0

หากคุณต้องการ GUI ให้ลองใช้VisualWgetซึ่งสะอาดแล้วและมีคุณสมบัติครบถ้วน มันขึ้นอยู่กับ GNU Wget สำหรับเครื่องมือดาวน์โหลด

แก้ไข: ลิงก์ที่อัปเดต


1
นี่คือลิงก์ที่อัปเดตแล้ว: sites.google.com/site/visualwget/… (การดาวน์โหลดอยู่ที่ด้านล่างของหน้าใช้ลูกศรเล็ก ๆ ทางขวา)
Reed Hedges

0

ดังที่บันทึกไว้ในคำตอบ SUนี้คุณสามารถใช้สิ่งต่อไปนี้ใน Powershell:

Import-Module bitstransfer
start-bitstransfer -source http://something/something.ext -destination c:\something.ext

-1

อีกทางเลือกหนึ่งในการใช้ gnuwin32 คือunxutilsซึ่งรวมถึง wget


คุณสามารถจัดการกับ unxutils แต่เก่ามันใช้ wget เวอร์ชันเก่า gnuwin32 เป็นสิ่งที่ใช้ ไม่ค่อยสะดวกในการติดตั้งและหาสิ่งต่าง ๆ ไม่ง่ายนัก แต่ก็มีสิ่งที่เกินความจำเป็นด้วย
barlop

-3

หากคุณต้องการโพสต์แบบภาพสำหรับ Windows นี่คือสิ่งที่คุณต้องการ
คุณสามารถโพสต์ข้อมูลหรือไฟล์ด้วย

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