Cách tải xuống các tệp từ dòng lệnh trong Windows như wget hoặc curl


348

Làm cách nào tôi có thể tải xuống một cái gì đó từ web trực tiếp mà không cần Internet Explorer hoặc Firefox mở Acrobat Reader / Quicktime / MS Word / bất cứ điều gì?

Tôi đang sử dụng Windows, vì vậy phiên bản Windows của Wget sẽ làm.


Chỉ cần nhấp chuột phải vào tệp và nhấn "Lưu mục tiêu dưới dạng" hoặc "Lưu liên kết dưới dạng" hoặc "Lưu dưới dạng" (ngôn ngữ thay đổi tùy theo trình duyệt của bạn) sẽ hoạt động.
BrainSlugs83

25
Điểm có một lệnh là có thể viết một tệp bó và chạy nó (có lẽ được lên lịch như một nhiệm vụ) bất cứ lúc nào bạn muốn. Đó là nơi GUI thiếu.
Jbm

4
Làm thế nào để bạn tải xuống với MS Word?
Jaime Hablutzel

5
@JaimeHablutzel Tại sao bạn muốn tải xuống một cái gì đó thông qua MS Word? MS Word không phải là thiết bị đầu cuối.
Braden hay nhất

1
@SDsolar Hoặc chỉ cần upvote / cải thiện câu trả lời dưới đây.
Franklin Yu

Câu trả lời:


180

Wget cho Windows sẽ hoạt động.

Từ Wget Wiki FAQ :

GNU Wget là một tiện ích mạng miễn phí để truy xuất các tệp từ World Wide Web bằng HTTP và FTP, hai giao thức Internet được sử dụng rộng rãi nhất. Nó hoạt động không tương tác, do đó cho phép làm việc trong nền, sau khi đã đăng xuất.

Từ phần FAQ này , các liên kết tải xuống được đề xuất:

Hệ nhị phân Windows

Liên kết với phép lịch sự của Jernej Simončič được sử dụng thay thế.


9
Ngoài ra còn có Winwget cybershade.us/winwget nếu bạn thích gui
Col

13
Phiên bản độc lập có thể tải xuống từ liên kết này .
Vito Gentile

5
Gần đây hơn, thậm chí cập nhật (tính đến ngày hôm nay), các bản dựng Windows , được cung cấp bởi Jernej Simončič
Gras Double

1
@cixelsyd Cập nhật liên kết đến nguồn thay thế.
Clearkimura

1
everallybored.org/misc/wget/ được gắn cờ bởi chương trình chống vi-rút doanh nghiệp trên hệ thống của tôi. Carbon Black / Bit 9. Có thể là dương tính giả. Nhưng sourceforge một chạy. Không hỗ trợ sslv3.
TamusJRoyce

311

Một thay thế tôi đã phát hiện ra gần đây, sử dụng PowerShell:

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

Nó hoạt động tốt với các truy vấn GET.

Nếu bạn cần chỉ định thông tin đăng nhập để tải xuống tệp, hãy thêm dòng sau vào giữa:

$client.Credentials =  Get-Credential                

Một dấu nhắc thông tin cửa sổ tiêu chuẩn sẽ bật lên. Thông tin đăng nhập bạn nhập vào sẽ được sử dụng để tải xuống tệp. Bạn chỉ cần làm điều này một lần cho tất cả thời gian bạn sẽ sử dụng đối tượng $ client.


91
Bạn cũng có thể thực hiện trong một dòng:(new-object System.Net.WebClient).DownloadFile('http://www.xyz.net/file.txt','C:\tmp\file.txt')
schellack

16
@Rob powershell được tích hợp sẵn trong Windows ...
nhinkle

9
Từ Vista trở lên, vâng.
Arran

3
@ BrainSlugs83, hoàn toàn, nhưng nhiều, rất nhiều người vẫn đang sử dụng XP. Nó chỉ đơn thuần là một cái gì đó để ghi nhớ.
Arran

4
@ BrainSlugs83, bạn đánh giá thấp lượng người vẫn còn trên các hệ thống Windows cũ hơn. Tôi không hiểu vấn đề, tôi chỉ ra rằng nó chỉ có trên Vista. Mọi người có thể chọn bỏ qua nó, hoặc nói "hey cảm ơn!", Nhưng bạn ....? Nếu bạn gặp sự cố, hãy tạo một cuộc trò chuyện và chúng tôi có thể nói chuyện. Ai đó có đại diện (như bạn) nên nhận ra ở đây không phải là nơi để thảo luận.
Arran

83

Nếu bạn có PowerShell> = 3.0, bạn có thể sử dụng Invoke-WebRequest

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

Hoặc chơi gôn

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

Tải xuống tệp qua HTTP trong Windows


Điều này không hoạt động với các chuyển hướng trên sourceforge (và có thể các trang web khác), trái ngược với System.Net.WebClient. Tuy nhiên, bạn có thể làm cho Invoke-WebRequestcông việc bằng cách thêm -UserAgent [Microsoft.PowerShell.Commands.PSUserAgent]::FireFox.
Ela782

Có một tùy chọn để xem tiến trình tải xuống?
Franklin Yu

@FranklinYu tiến trình sẽ hiển thị nếu tệp đủ lớn
Steven Penny

Có một tùy chọn để không chỉ định một outfile, nhưng vẫn lưu (như wgethoặc curl -O, curl --remote-namehoặc curl -J?)
Tomasz Gandor

60

Windows có tiện ích tải xuống dòng lệnh riêng - BITSAdmin :

BITSAdmin là một công cụ dòng lệnh mà bạn có thể sử dụng để tạo các công việc tải xuống hoặc tải lên và theo dõi tiến trình của chúng.

EDIT : 26.01.15 - Đây là tổng quan của tôi về cách tải xuống tệp trên windows mà không cần các công cụ bên ngoài

Và một ví dụ bitadmin hoàn chỉnh:

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

Chỉnh sửa : 15.05.2018 - hóa ra cũng có thể tải xuống một tệp với certutil :

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

Certutil không được cài đặt theo mặc định trên XP / Win2003 nhưng có sẵn trên các phiên bản Windows mới hơn. Đối với XP / 2003, bạn sẽ cần Gói công cụ quản trị cho máy chủ windows 2003


7
Hấp dẫn. Đó là một phần mềm vụng về so với wget.
Matt H

2
Lưu ý rằng Nó không được phát hành cùng với Windows XP và có thể không phải với các phiên bản khác.
Ian Dunn

12
Cập nhật: BITSAdmin không được dùng nữa và không được bảo đảm có sẵn trong các phiên bản Windows trong tương lai. Các công cụ quản trị cho dịch vụ BITS hiện được cung cấp bởi các lệnh ghép ngắn BITS PowerShell.
nulldev07

2
@MattH: bởi vì nó không được yêu thích ngay từ đầu? - xem en.wikipedia.org/wiki/Background_Intellect_Transfer_Service
peterchen

4
Không thể thêm tệp - 0x80070057
Tomáš Zato

32

Lưu văn bản sau dưới dạng wget.jsvà chỉ cần gọi

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

Đây là mã:

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");
*/

Kịch bản này là ngôn ngữ gì? Có vẻ hữu ích cho nhiệm vụ hiện tại của tôi. Tôi muốn tìm thêm tài liệu tham khảo. Trông không giống vb
G-.

1
Hữu ích cho các tập tin duy nhất. Cần tăng cường tải xuống đệ quy và https.
quang

4
@ G-. Tôi đến bữa tiệc muộn, nhưng đó là JavaScript.
prooffreader

Tôi đã cố gắng làm điều đó cho cơ sở dữ
liệu.clamav.net / d Daily.cvd

22

Có một cURL riêng cho Windows có sẵn ở đây . Có nhiều hương vị có sẵn - có và không có hỗ trợ SSL.

Bạn không cần thêm hành lý của Cygwin và những thứ tương tự, chỉ cần một tệp EXE nhỏ.


Điều quan trọng cần biết là có cả hai wgetcurlbí danh được tích hợp trong tất cả các phiên bản hiện đại của Windows Powershell. Chúng là tương đương.

Không có tệp hoặc tải xuống bổ sung được yêu cầu để có được wgetchức năng:

Sử dụng Curl In Powershell (The Socible Geek)

Trích đoạn:

Bạn có thể nhập lệnh cURL giống như lệnh tải tệp xuống từ kho GitHub.

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

và có vẻ như nó hoạt động nhưng những gì nó thực sự đang làm chỉ là sử dụng cURL như một bí danh. Trong trường hợp trên, điều sẽ xảy ra là bạn sẽ chỉ nhận được các tiêu đề thay vì chính tệp đó.

Bí danh trong PowerShell cho phép bạn tạo các phím tắt cho các lệnh dài hơn để bạn không phải gõ chúng ra mọi lúc.

Nếu bạn gõ lệnh Get-Alias, nó sẽ cung cấp cho bạn một danh sách tất cả các Bí danh được sử dụng trong PowerShell. Như bạn có thể thấy, lệnh curl chỉ gọi lệnh Invoke-WebRequest. Chúng tương tự nhau nhưng không giống nhau, đó là lý do tại sao yêu cầu trên không phù hợp với chúng tôi.

nhập mô tả hình ảnh ở đây

Để làm cho điều này hoạt động chính xác trong PowerShell, cách dễ nhất là sử dụng các biến và -OutFileđối số như được hiển thị ở đây:

nhập mô tả hình ảnh ở đây

(tên file cắt đứt trong hình ảnh “ https://raw.githubusercontent.com/Azure/azure-quickstart-templates/master/mongodb-on-ubuntu/azuredeploy.json ”)

Cú pháp này sẽ tải xuống toàn bộ nội dung của tệp đích vào tệp azuredeploy.jsoncục bộnewfile.json


Ưu điểm chính là nó được tích hợp vào chính Powershell nên mã này sẽ thực thi trực tiếp mà không cần tải xuống hoặc bất kỳ sáng tạo tệp bổ sung nào được yêu cầu để làm cho nó hoạt động trên mọi phiên bản Windows hiện đại.


Điều này được thực hiện trực tiếp trên một dòng, nhưng dòng này khá dài và không thể đọc được ngay lập tức.
SDsolar

21

Tôi đã tạo một tệp myGet.bat nhanh chóng gọi phương thức PowerShell được mô tả ở trên.

@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

Tôi đã mượn một số mã từ phân tích cú pháp URL cho tên tệp có khoảng trắng .


1
Tại sao các downvote? điều này có vẻ ổn với tôi và là một câu trả lời trực tiếp cho câu hỏi. Vâng, nó rất cục mịch và có thể sử dụng cải tiến, như thoát các ký hiệu (&) trong url, nhưng nó hoạt động như bình thường.
matt wilkie

Sẽ không dễ dàng hơn nếu chỉ viết một tập lệnh PowerShell ???
SamB

1
powershell.exe -Command "Invoke-WebRequest -OutFile ./file-name https://location/file-name"<- Việc sử dụng quyền hạn một dòng đơn giản trong tệp tập lệnh vị trí mã hóa cứng và tên tệp.
James Eby

8

Tôi đã tìm kiếm tương tự, và vì tôi không có đặc quyền cài đặt bất kỳ gói nào ở trên, tôi đã tìm một cách giải quyết nhỏ (để tải xuống 30 tệp):

  • Tôi đã tạo một tệp bó
  • Liệt kê tất cả các tập tin
  • Đặt firefox.exeở đầu mỗi dòng
  • Đi đến thư mục firefox trong Program Files
  • Chạy đi.

4

Nếu PowerShell là một tùy chọn, đó là tuyến ưa thích, vì bạn (có khả năng) sẽ không phải cài đặt thêm bất cứ thứ gì:

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

Thất bại trong việc đó, Wget cho Windows, như những người khác đã chỉ ra chắc chắn là lựa chọn tốt thứ hai. Như được đăng trong một câu trả lời khác, có vẻ như bạn có thể tự tải xuống Wget hoặc bạn có thể lấy nó như một phần của Cygwin hoặc MSys .

Nếu vì một lý do nào đó, bạn thấy mình bị mắc kẹt trong một khoảng thời gian, sử dụng máy không có PowerShell bạn không có quyền truy cập vào trình duyệt web đang hoạt động (nghĩa là Internet Explorer là trình duyệt duy nhất trên hệ thống và cài đặt của nó bị hỏng) và tệp của bạn nằm trên một trang FTP (trái ngược với HTTP):

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

Nếu bộ nhớ phục vụ nó đã có từ Windows 98 và tôi có thể xác nhận rằng nó vẫn còn trong Windows 8 RTM (bạn có thể phải truy cập appwiz.cplvà thêm / xóa các tính năng để có được nó). Tiện ích này có thể tải xuống và tải tệp lên / từ các trang FTP trên web. Nó cũng có thể được sử dụng trong các tập lệnh để tự động hóa hoạt động.

Công cụ này được tích hợp sẵn là công cụ tiết kiệm thực tế đối với tôi trong quá khứ, đặc biệt là vào thời của ftp.cdrom.com - Tôi đã tải xuống Firefox theo cách đó một lần, trên một máy bị hỏng hoàn toàn chỉ có Internet quay số kết nối (trở lại khi kích thước gói tối đa của sneakernet vẫn là 1,44 MB và Firefox vẫn được gọi là "Netscape" / tôi không trollface ).

Một vài lời khuyên: đó là bộ xử lý lệnh của riêng nó và nó có cú pháp riêng. Hãy thử gõ "trợ giúp". Tất cả các trang FTP yêu cầu tên người dùng và mật khẩu; nhưng nếu họ cho phép người dùng "ẩn danh", tên người dùng là "ẩn danh" và mật khẩu là địa chỉ email của bạn (bạn có thể tạo một địa chỉ nếu bạn không muốn bị theo dõi, nhưng thường có một số logic để đảm bảo rằng đó là logic một địa chỉ email hợp lệ).


+1 để nghĩ về dòng lệnh ftp! Tuy nhiên, wget và powershell đều được đề cập tốt trước khi bạn tham gia bữa tiệc, vì vậy -1 ở đó. : - /
matt wilkie

Các câu trả lời về quyền hạn khác mà tôi thấy là tất cả các lớp lót và / hoặc có một số mùi mã cho chúng - đây là một lớp lót ngắn và đơn giản để tải xuống một tệp. - Ngoài ra tôi muốn cung cấp một câu trả lời bao gồm tất cả các cơ sở. :-)
BrainSlugs83

1
Tôi không chắc tại sao bạn có hai dấu hỏi trong tệp đíchC:\tmp\file.tx??t
Ploni



2

Bạn cũng có thể sử dụng wgetgói được đóng gói trong PowerShell . ; ^) Để mở, nhấn phím Windows và nhập "powershell" hoặc Windows-R và gõ "powershell" và nhấn return.

Không cần cài đặt.

Một điểm khác biệt thú vị so với thông thường wget(nhiều hơn ở liên kết đó ): Bạn không thể đơn giản sử dụng lớn hơn so với đường ống vào một tệp. wgettrong PowerShell chỉ là một trình bao bọc tiện lợi Invoke-WebRequestvà bạn cần sử dụng cú pháp của nó để ghi vào một tệp.

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

1
-OutFileđã làm công việc!
Dimitry K

1

Bạn có thể lấy WGet cho Windows tại đây . Ngoài ra, bạn có thể nhấp chuột phải vào liên kết tải xuống của mục bạn muốn tải xuống và chọn Lưu dưới dạng. Điều này sẽ tải tập tin và không mở nó trong ứng dụng được chỉ định.


1

Tôi nghĩ cài đặt wgetqua Chocolatey là cách dễ nhất.

  1. Cài đặt Chocolatey
  2. Từ dòng lệnh, gõ: choco install wget
  3. Sau đó, bạn có thể sử dụng wgettừ dòng lệnh như trên các hệ thống * nix.

1

Tìm kiếm /downloadchức năng trên https://lolbas-project.github.io .

Ngay bây giờ có Bitsadmin.exe, Certutil.exe, Esentutl.exe, Expand.exe, Extrac32.exe, Findstr.exe, Hh.exe, Ieexec.exe, Makecab.exe, Replace.exedành cho Windows Vista, Windows 7, Windows 8, Windows 8.1, Windows 10 và các phiên bản máy chủ tương đương.


0

Nếu bạn muốn có GUI, hãy thử VisualWget , thực sự sạch và tính năng đầy đủ. Nó dựa trên GNU Wget cho công cụ tải xuống của nó.

EDIT: liên kết cập nhật.


1
đây là một liên kết được cập nhật: sites.google.com.vn/site/visualwget/, (các phần tải xuống ở cuối trang, sử dụng các mũi tên nhỏ ở bên phải)
Reed Hedges

0

Như tài liệu trong câu trả lời SU này , bạn có thể sử dụng như sau trong Powershell:

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

-1

Một thay thế cho việc sử dụng GnuWin32 là UnxUtils bao gồm wget.


bạn có thể quản lý với unxutils nhưng nó đã cũ, nó sử dụng một phiên bản cũ của wget. gnuwin32 là thứ để sử dụng. không hoàn toàn thuận tiện để cài đặt và không dễ tìm thấy mọi thứ, nhưng nó có nhiều hơn so với unxutils.
barlop

-3

Nếu bạn cần một bài viết trực quan cho Windows, đây là một.
Bạn có thể đăng dữ liệu hoặc tập tin với nó.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.