Có thể tải xuống bằng dòng lệnh Windows không?


123

Không sử dụng bất kỳ tiện ích phi tiêu chuẩn (bao gồm Windows), có thể tải xuống bằng dòng lệnh Windows không?

Phiên bản ưa thích là Windows XP, nhưng cũng thú vị khi biết các phiên bản mới hơn.

Để làm rõ hơn câu hỏi của tôi:

  • Nó phải được sử dụng HTTP
  • Các tập tin cần phải được lưu
  • Cài đặt Windows sạch tiêu chuẩn, không có công cụ bổ sung

Về cơ bản, vì mọi người đang hét Wget , tôi muốn chức năng Wget đơn giản, không cần sử dụng Wget.


6
Thêm ý tưởng trong "Nếu trình duyệt duy nhất trong Windows đã chết, làm thế nào để kết nối với Internet?" tại superuser.com/questions/50427/
Arjan

Và trong số hàng chục phiên bản Windows XP đó sẽ là gì?
Arjan

Giả sử nó có thể là bất kỳ phiên bản Windows XP SP2 nào và mọi thứ được phát hành sau đó.
Robert Massa

@arjan Câu hỏi thú vị, nhưng vẫn chưa có câu trả lời dứt khoát.
Robert Massa

Tôi nên đã yêu cầu "phiên bản". Như Starter, Home, Professional, Media Center, Tablet, thậm chí có thể là Embedded (tôi đoán là thay đổi tốt cho các công cụ ở đó!) ... Hoặc các phiên bản châu Âu không có Windows Media Player. :-)
Arjan

Câu trả lời:


51

Bạn có thể viết VBScript và chạy nó từ dòng lệnh

Tạo một tệp downloadfile.vbsvà chèn các dòng mã sau:

' Set your settings
    strFileURL = "http://www.it1.net/images/it1_logo2.jpg"
    strHDLocation = "c:\logo.jpg"

' Fetch the file
    Set objXMLHTTP = CreateObject("MSXML2.XMLHTTP")

    objXMLHTTP.open "GET", strFileURL, false
    objXMLHTTP.send()

If objXMLHTTP.Status = 200 Then
Set objADOStream = CreateObject("ADODB.Stream")
objADOStream.Open
objADOStream.Type = 1 'adTypeBinary

objADOStream.Write objXMLHTTP.ResponseBody
objADOStream.Position = 0    'Set the stream position to the start

Set objFSO = CreateObject("Scripting.FileSystemObject")
If objFSO.Fileexists(strHDLocation) Then objFSO.DeleteFile strHDLocation
Set objFSO = Nothing

objADOStream.SaveToFile strHDLocation
objADOStream.Close
Set objADOStream = Nothing
End if

Set objXMLHTTP = Nothing

Chạy nó từ dòng lệnh như sau:

cscript.exe downloadfile.vbs 

1
Tôi tự hỏi nếu điều này phụ thuộc vào Internet Explorer, nhưng tôi đoán đây sẽ là một câu trả lời tốt cho "Nếu trình duyệt duy nhất trong Windows bị chết, làm thế nào để kết nối với Internet?" tại superuser.com/questions/50427/ trộm :-)
Arjan

đó là nếu sự cho phép đối với cscript.exe được cho phép
hello_there_andy

Tôi có thể xác nhận rằng tôi đã thử nghiệm tập lệnh này trong Windows PE 5.1 và nó đã hoạt động như một cơ duyên. Tôi dự định sử dụng nó để triển khai ngoại tuyến, để kiểm tra phiên bản của nền tảng trong ổ USB với tệp văn bản được lưu trữ trên máy chủ.
Wayfarer

74

Bắt đầu với Windows 7, tôi tin rằng có một phương pháp duy nhất chưa được đề cập nhưng thật dễ dàng:

Cú pháp:

bitsadmin / chuyển job_name        / download / ưu tiên    URL   cục bộ \ path \ file

Thí dụ:

bitsadmin / chuyển mydoadjob / tải xuống / ưu tiên bình thường ^
                  http://example.com/filename.zip C: \ Users \ username \ Tải xuống \ filename.zip

(Được chia thành hai dòng riêng biệt ^để dễ đọc (để tránh cuộn).)

Cảnh báo: Như đã nêu trong các nhận xét, bitsadminthông báo trợ giúp bắt đầu bằng cách nói:

BITSAdmin is deprecated and is not guaranteed to be available in future versions of Windows.
Administrative tools for the BITS service are now provided by BITS PowerShell cmdlets.

... nhưng một bình luận khác báo cáo rằng nó hoạt động trên Windows 8.


16
nó là một phần của windows7.
akira

3
không hoạt động trên windows 7 của tôi ...
jyz

3
Đây nên là câu trả lời được bình chọn hàng đầu. bitsadmin không được ủng hộ cho Windows powershell.
lenkite

3
Xác nhận làm việc trên Win7
kaiser

7
Lưu ý: BITSAdmin không được dùng nữa và không được bảo đảm là 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.
Ujjwal Singh

39

Windows 7 bao gồm PowerShell và không có gì nhiều bạn không thể làm với PowerShell.

Thay thế gốc cho wget trong Windows PowerShell?


16
(Net-Object mới.WebClient) .D DownloadFile ('someurl', 'somepath')
Jason Stangroome

3
Powershell là dành cho Powerrangers ! Làm thế nào là kool đó và tại sao tôi không biết về điều này? Byebye cmd.
kaiser

17
từ cmd.exe : powershell -command "& { iwr http://www.it1.net/it1_logo2.jpg -OutFile logo.jpg }". cũng hoạt động từ dấu nhắc chạy
Janus Troelsen

1
Vâng, không có gì bạn không thể làm mà không có quyền hạn. Đó là một tarpit thực sự :)
jcarpenter2

@JanusTroelsen phiên bản PowerShell của tôi đã trả lời "Thuật ngữ 'iwr' không được công nhận là tên của một lệnh ghép ngắn, ..." nhưng sau một số điều tra, cách tương tự này đã hoạt động:powershell -command "$clnt = new-object System.Net.WebClient; $clnt.DownloadFile(\"https://host/name\", \"outpufilename\")"
rogerdpack

25

PowerShell (bao gồm Windows 8 và đi kèm với .NET cho các bản phát hành trước đó) có khả năng này. Các powershelllệnh cho phép chạy các lệnh PowerShell tùy ý từ dòng lệnh hoặc một .battập tin. Vì vậy, dòng sau đây là những gì muốn:

powershell -command "& { (New-Object Net.WebClient).DownloadFile('http://example.com/', 'c:\somefile') }"

2
Điều này không cung cấp một câu trả lời cho câu hỏi. Để phê bình hoặc yêu cầu làm rõ từ một tác giả, hãy để lại nhận xét bên dưới bài đăng của họ - bạn luôn có thể nhận xét về bài đăng của riêng bạn và khi bạn có đủ danh tiếng, bạn sẽ có thể nhận xét về bất kỳ bài đăng nào .
harrymc

3
@harrymc chắc chắn đó là một câu trả lời. Nó tải một tập tin. Nhiều hơn những gì bạn muốn?
Janus Troelsen

1
(1) Một số văn bản để giải thích điều gì làm điều này, (2) Xác minh rằng câu trả lời của bạn không phải là một công thức thay thế cho câu trả lời trước đó, vì nếu có, nó nên được thể hiện dưới dạng nhận xét về câu trả lời đó.
harrymc

Phiên bản Windows và PowerShell nào được yêu cầu để hoạt động?
Peter Mortensen

2
điều này không hoạt động trong Windows Server 2012 FYI, nó ném ra
Phương thức ngoại lệ

17

Tôi đã tìm thấy một cách để làm điều đó, nhưng thực sự, chỉ cần cài đặt Wget .

Bạn có thể sử dụng Internet Explorer từ một dòng lệnh (iexplore.exe) và sau đó nhập URL làm đối số. Vì vậy, chạy:

iexplore.exe http://blah.com/filename.zip

Dù tệp là gì, bạn sẽ cần chỉ định nó không cần xác nhận trước. Lo và kìa, nó sẽ tự động thực hiện việc tải xuống. Vì vậy, có, về mặt kỹ thuật là có thể, nhưng chúa tể tốt làm điều đó theo một cách khác.


Tôi biết wget là một cách tốt hơn nhiều, nó chỉ là một câu hỏi giả định;) Câu trả lời của bạn khá gần, nhưng vẫn cần sự can thiệp của người dùng (nhấp vào "Lưu" hoặc định cấu hình để không hiển thị hộp thoại này)
Robert Massa

3
Giống như tôi đã nói, bạn phải bỏ chọn tùy chọn nhắc nhở để lưu cho loại tệp đó. Ví dụ: tải xuống tệp zip, tắt lời nhắc đó và trong tương lai, mọi tệp zip được truy cập từ dòng lệnh sẽ tự động lưu.
DHayes

1
+1, mặc dù tôi đã không xác nhận nó hoạt động (nhưng báo cáo kết quả cuối cùng là rất đúng)
Arjan

1
+1 cho "chúa tể thân yêu đừng làm theo cách này" ... :)
quack quixote

12

Windows Explorer (không bị nhầm lẫn với Internet Explorer) có thể tải xuống các tệp qua HTTP. Chỉ cần nhập URL vào thanh Địa chỉ. Hoặc từ dòng lệnh, ví dụ , C:\windows\explorer.exe http://somewhere.com/filename.ext.

Bạn nhận được lời nhắc Tải xuống tệp cổ điển . Trừ khi tệp là loại mà Windows Explorer biết cách hiển thị nội tuyến, (.html, .jpg, .gif), trong trường hợp đó bạn sẽ cần phải nhấp chuột phải để lưu tệp.

Tôi vừa thử nghiệm điều này trên hình ảnh VMware của tôi về một bản cài đặt Windows XP 2002 SP1 nguyên bản và nó hoạt động tốt.


4
điều này đòi hỏi sự tương tác của người dùng. có lẽ không phải là điều mà hầu hết những người muốn tải xuống một tệp từ dấu nhắc lệnh muốn
Kip

Ngày nay, nó phụ thuộc vào trình duyệt mặc định của bạn. Của tôi là chrome và nó tự động tải xuống một vị trí đã biết, vì vậy tôi coi giải pháp này là đủ cho nhu cầu của mình. Cám ơn!
kayleeFrye_onDeck

7

Bạn có thể sử dụng (trong một dơi Windows tiêu chuẩn):

powershell -command "& { iwr http://www.it1.net/it1_logo2.jpg -OutFile logo.jpg }"

Có vẻ như cần PowerShell v4 ...

(Nhờ bình luận đócái này )


6

Sử dụng FTP.

Từ dòng lệnh:

ftp ftp.somesite.com
user
password

vv FTP được bao gồm trong mọi phiên bản Windows tôi có thể nhớ; có thể không phải trong 3.1, có thể không phải trong Windows 95 , nhưng chắc chắn mọi thứ sau đó.

@RM: Sẽ rất khó khăn nếu bạn không muốn tải xuống bất kỳ công cụ nào khác. Tồn tại một dòng lệnh Wget cho WindowsWget được thiết kế để thực hiện chính xác những gì bạn yêu cầu.


+1 câu trả lời hay. ftp khá phổ biến, miễn là máy chủ bạn đang cố tải xuống từ hỗ trợ nó.
DaveParillo

Cảm ơn bạn, xin lỗi tôi không cụ thể hơn, ý tôi là sử dụng HTTP.
Robert Massa

1
Điều này sẽ không hoạt động với hầu hết các máy chủ FTP vì chế độ thụ động không được hỗ trợ bởi ứng dụng khách Windows ftp này (với NAT phải có chế độ thụ động giữa các chế độ thụ động).
Peter Mortensen

@PeterMortensen Nó cũng không trả lời từ xa câu hỏi kể từ khi anh chỉnh sửa nó để xác định rằng anh đang tìm kiếm chức năng wget. Nhưng đừng để điều đó ngăn bạn hồi sinh một câu trả lời sai 7 tuổi chỉ để thêm một số phương pháp giáo dục.
Satanicpuppy

4

Sử dụng PowerShell như thế này:

  1. Tạo một tệp download.ps1:

    param($url, $filename)
    $client = new-object System.Net.WebClient 
    $client.DownloadFile( $url, $filename)
    
  2. Bây giờ bạn có thể tải xuống một tệp như thế này:

    powershell Set-ExecutionPolicy Unrestricted
    powershell -ExecutionPolicy RemoteSigned -File "download.ps1" "http://somewhere.com/filename.ext" "d:\filename.ext"
    

Điều này hoạt động, ngay cả trên Windows XP 64-bit, PowerShell 2.0.
Peter Mortensen

1

Nếu bạn cài đặt Telnet, tôi tưởng tượng bạn có thể thực hiện yêu cầu HTTP đến máy chủ để tải xuống tệp.

Bạn cũng có thể cài đặt Cygwin và sử dụng wget để tải xuống một tệp. Đây là một cách rất dễ dàng để tải tập tin từ dòng lệnh.


2
Tôi khá chắc chắn 'cygwin' được coi là một tiện ích không chuẩn ;-)
DaveParillo

Telnet là một tùy chọn thú vị, có cách nào để dẫn đầu ra vào một tệp mà không làm hỏng nó không? Và chúng ta có thể chuyển lệnh HTTP GET vào telnet để thực hiện yêu cầu không?
Robert Massa

Cài đặt telnet? Telnet giống như ftp; nó đi kèm với các cửa sổ. Không biết về việc chuyển hướng đầu ra mặc dù.
Satanicpuppy

Đối với XP (như trong câu hỏi) telnet được cài đặt theo mặc định, nhưng tôi nghe nói rằng trên Vista không còn như vậy nữa? Nhưng không, nó không cho phép tải xuống tệp, trừ khi tất cả được trả về trong một phản hồi HTTP duy nhất người ta có thể loại bỏ các tiêu đề và giải mã nội dung trên dòng lệnh. Khá khó có ai có thể kiểm soát điều đó.
Arjan

1
Tại sao cài đặt cygwin chỉ để sử dụng wget? Có một nhị phân win32 có sẵn.
innaM

1

Có một số cách bạn có thể tải xuống bằng dòng lệnh trong Windows:

  1. Bạn có thể sử dụng Cygwin .

    Lưu ý: các ứng dụng đi kèm không phải là ứng dụng Linux gốc. Bạn phải xây dựng lại ứng dụng của mình từ nguồn nếu bạn muốn chạy trên Windows.

  2. Sử dụng telnet có thể thực hiện yêu cầu nhưng bạn sẽ không thấy bất kỳ xử lý nào.

  3. Bạn có thể viết kịch bản bat hoặc VBS.

  4. Viết chương trình của riêng bạn mà bạn có thể chạy từ cmd.exe.


1

Bạn có thể cài đặt ứng dụng Linux Wget trên Windows. Nó có thể được tải xuống từ http://gnuwin32.sourceforge.net/packages/wget.htm . Sau đó, bạn có thể đưa ra lệnh 'wget (inserturlhere)' hoặc bất kỳ URL nào khác trong dấu nhắc lệnh của mình và nó sẽ cho phép bạn tải xuống URL / tệp / hình ảnh đó.


1
Kỳ lạ là phiên bản này không phải lúc nào cũng tương thích. Trên máy tính Windows 7 của tôi, không phải vì thư viện bị thiếu. Bạn muốn sử dụng wget mà không cần bất kỳ thư viện bổ sung nào. users.ugent.be/~bpuype/wget
sinni800


0

Trong Windows mặc định, bạn không thể tải xuống qua HTTP. Windows là một hệ điều hành tập trung vào GUI, vì vậy nó thiếu nhiều công cụ dòng lệnh mà bạn tìm thấy trong các hệ điều hành khác, như wget, sẽ là ứng cử viên chính.

System.Net.WebClient.DownloadFile(), một chức năng trong WiniNetAPI, có thể tải xuống các tệp, nhưng tôi không chắc bạn sẽ bắt đầu phát triển thực tế bao xa so với một tệp bó.


Tôi hiểu có thể sử dụng wget, nhưng câu hỏi của tôi không có sử dụng các tiện ích cửa sổ không chuẩn.
Robert Massa

0

Nếu bạn đã cài đặt python thì đây là một ví dụ tìm nạp get-pip.py từ web

python -c "import urllib; urllib.urlretrieve ('https://bootstrap.pypa.io/get-pip.py', r'C:\python27\Tools\get-pip.py')"
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.