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


Làm thế nào tôi có thể tải về một cái gì đó từ các trang 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 Wget sẽ làm.


283


gốc


Chỉ cần nhấp chuột phải vào một tập tin và nhấn "Save Target As" hoặc "Save Link As" hoặc "Save As" (ngôn ngữ khác nhau tùy thuộc vào trình duyệt của bạn) sẽ hoạt động. - BrainSlugs83
Điểm của việc có một lệnh là có thể viết một tập tin thực thi và chạy nó (có lẽ được lên kế hoạch như một nhiệm vụ) bất cứ lúc nào bạn muốn. Đó là nơi GUI bị thiếu. - Jbm
Bạn tải xuống bằng MS Word như thế nào? - Jaime Hablutzel
@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 Best
@SDsolar Hoặc chỉ upvote / cải thiện câu trả lời này phía dưới. - Franklin Yu


Các câu trả lời:


Wget cho Windows nên làm việc.

Từ Câu hỏi thường gặp về Wget Wiki:

GNU Wget là một tiện ích mạng miễn phí để truy xuất các tệp từ thế giới   Web rộng sử dụng HTTP và FTP, hai Internet được sử dụng rộng rãi nhất   giao thức. 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 này của FAQ, liên kết tải xuống được đề xuất:

Windows Binaries

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


156



Ngoài ra còn có Winwget cybershade.us/winwget nếu bạn thích gui - Col
Phiên bản độc lập có thể tải xuống từ liên kết này. - Vito Gentile
Gần đây hơn, thậm chí cập nhật (tính đến hôm nay) Windows được xây dựng, được cung cấp bởi Jernej Simončič - Gras Double
@VitoShadow liên kết bị hỏng - The Red Pea
@cixelsyd Cập nhật liên kết đến nguồn thay thế. - clearkimura


Một thay thế mà tôi đã phát hiện 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                

Dấu nhắc thông tin đăng nhập cửa sổ 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.


273



Bạn cũng có thể làm điều đó trong một dòng: (new-object System.Net.WebClient).DownloadFile('http://www.xyz.net/file.txt','C:\tmp\file.txt') - schellack
@Rob powershell được tích hợp trong Windows ... - nhinkle♦
Từ Vista lên, vâng. - Arran
@ BrainSlugs83, hoàn toàn, nhưng nhiều, nhiều, mọi người vẫn đang sử dụng XP. Nó chỉ là một cái gì đó để ghi nhớ. - Arran
@ BrainSlugs83, bạn đánh giá thấp số 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 trở lên. Mọi người có thể chọn bỏ qua nó hoặc nói "xin 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. Người nào đó có đại diện (như bạn) nên nhận ra đây không phải là nơi dành cho cuộc thảo luận này. - Arran


Nếu bạn có PowerShell> = 3.0, bạn có thể sử dụng Gọi-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


64



Đ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 Invoke-WebRequest làm việc bằng cách thêm -UserAgent [Microsoft.PowerShell.Commands.PSUserAgent]::FireFox. - Ela782
Đây là câu trả lời đúng ngay bây giờ, @ CédricBelin là đúng. Câu hỏi & câu trả lời được chấp nhận là khá cũ. - Factor Mystic
Để chạy điều này từ một thiết bị đầu cuối cmd: powershell -command "& {&'iwr' index.html http://superuser.com}" - dario_ramos
Có một tùy chọn để xem tiến trình tải xuống không? - Franklin Yu
@FranklinYu tiến trình sẽ hiển thị nếu tệp đủ lớn - Steven Penny


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

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

CHỈNH SỬA: 26,01,15 - - Dưới đây là tổng quan về cách một tệp có thể được tải xuống trên các cửa sổ mà không 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ó thể tải xuống tập tin với certutil quá:

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

Certutil không được cài đặt mặc định trên XP / Win2003 nhưng có thể sử dụng được 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


39



Hấp dẫn. Đó là một phần vụng về của phần mềm so với wget. - Matt H
Lưu ý rằng nó không giao hàng với Windows XP, và có thể không phải với các phiên bản khác. - Ian Dunn
Cập nhật: BITSAdmin không còn được dùng nữa và không được bảo đảm khả dụng trong các phiên bản Windows sau này. 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
@ MattH: bởi vì nó được cho là được wget ngay từ đầu? - xem en.wikipedia.org/wiki/Background_Intelligent_Transfer_Service - peterchen
Không thể thêm tệp - 0x80070057 - Tomáš Zato


Lưu văn bản sau dưới dạng wget.js và 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");
*/

28



Kịch bản này là ngôn ngữ gì? Có vẻ hữu ích cho tác vụ hiện tại của tôi. Tôi muốn tìm thêm tài liệu tham khảo. Không giống như vb - G-.
Hữu ích cho các tệp đơn lẻ. Cần nâng cao để tải xuống đệ quy và https. - opticyclic
@ G-. Tôi đến muộn bữa tiệc, nhưng đó là JavaScript. - prooffreader
Tôi đã cố gắng làm điều đó cho database.clamav.net/daily.cvd, nhưng nó chỉ tải xuống 88kB trong tổng số 44MB :( - kokbira


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 URL cho tên tệp có không gian.


16



tại sao 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. Có nó clunky và có thể sử dụng cải tiến, như thoát ampersands (&) trong url, nhưng nó hoạt động như là. - matt wilkie


Có sẵn một cURL gốc cho Windows đây. Có rất 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ý Cygwin và thích, chỉ một tệp EXE nhỏ.


Nó cũng quan trọng để biết rằng có cả hai wget và curl bí danh được tích hợp vào tất cả các phiên bản Windows Powershell hiện đại. Chúng tương đương nhau.

Không cần thêm tệp hoặc tải xuống để có được wgetchức năng:

Sử dụng Curl trong Powershell (The Sociable Geek)

Trích:

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

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

và nó 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 làm bí danh. Trong ví dụ trên, điều sẽ xảy ra là   bạn sẽ chỉ nhận được tiêu đề thay vì tập tin.

Bí danh trong PowerShell cho phép bạn tạo lối tắt cho các lệnh dài hơn, do đó bạn không cần phải loại chúng ra tất cả thời gian.

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 giống nhau nhưng không giống nhau, đó là lý do tại sao yêu cầu trên không hiệu quả đối với chúng tôi.

enter image description here

Để làm điều này hoạt động bình thường 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:

enter image description here

(tên tệp bị cắt trong ả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 azuredeploy.json vào tệp cục bộ newfile.json


Ưu điểm chính là nó được xây dựng 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ỳ tác phẩm tạo tập tin phụ nào khác được yêu cầu để làm cho nó hoạt động trên bất kỳ phiên bản Windows hiện đại nào.


15



Điều này được thực hiện trực tiếp trên một dòng, nhưng dòng được khá dài và không phải là ngay lập tức có thể đọc được trong nháy mắt. - SDsolar
Cách tốt nhất, cảm ơn - Konstantin Chernov


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, nên tôi đã giải quyết một cách nhỏ (để tải xuống 30 tệp +):

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

8





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

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

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

Nếu vì lý do nào đó, bạn thấy mình bị mắc kẹt trong một thời gian dọc, sử dụng một 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 (tức là Internet Explorer là trình duyệt duy nhất trên hệ thống và cài đặt của trình duyệt bị hỏng) và tệp của bạn nằm trên trang FTP (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 đi vào appwiz.cpl và 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 kịch bản để tự động hóa một trong hai thao tác.

Công cụ này được tích hợp sẵn đã là một trình bảo vệ cuộc sống thực sự cho tôi trong quá khứ, đặc biệt là trong những ngày 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 hoàn toàn bị hỏng 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 riêng của nó, và nó có cú pháp riêng của nó. Hãy thử nhập "trợ giúp". Tất cả các trang FTP đều 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 tài khoản nếu bạn không muốn bị theo dõi, nhưng thường có một số loại logic để đảm bảo nó địa chỉ email hợp lệ).


3



1 cho suy nghĩ của dòng lệnh ftp! Tuy nhiên wget và powershell đã được đề cập đến trước khi bạn gia nhập nhóm, vì vậy -1 ở đó. : - / - matt wilkie
Các câu trả lời của powerhell khác mà tôi thấy là tất cả các bộ đa dòng 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ăn cứ. :-) - BrainSlugs83
Tôi không chắc tại sao bạn có hai dấu chấm hỏi trong tệp đích C:\tmp\file.tx??t - Ploni