Apakah mungkin mengunduh dengan menggunakan baris perintah Windows?

123

Tanpa menggunakan utilitas non-standar (termasuk Windows), mungkinkah mengunduh dengan menggunakan baris perintah Windows?

Versi yang disukai adalah Windows XP, tetapi juga menarik untuk mengetahui untuk versi yang lebih baru.

Untuk lebih memperjelas pertanyaan saya:

  • Itu harus menggunakan HTTP
  • File perlu disimpan
  • Instalasi Windows bersih standar, tidak ada alat tambahan

Jadi pada dasarnya, karena semua orang berteriak Wget , saya ingin fungsionalitas Wget sederhana, tanpa menggunakan Wget.

Robert Massa
sumber
6
Gagasan lainnya di "Jika satu-satunya browser di Windows mati, bagaimana cara terhubung ke Internet?" at superuser.com/questions/50427/…
Arjan
Dan dari selusin versi Windows XP manakah itu?
Arjan
Katakanlah itu bisa berupa versi windows XP SP2 dan semuanya dirilis nanti.
Robert Massa
@arjan Pertanyaan menarik, tetapi masih belum ada jawaban pasti.
Robert Massa
Saya seharusnya meminta "edisi". Seperti Starter, Home, Professional, Media Center, Tablet, bahkan mungkin Embedded (saya kira perubahan bagus untuk alat di sana!) ... Atau versi Eropa tanpa Windows Media Player. :-)
Arjan

Jawaban:

51

Anda dapat menulis VBScript dan menjalankannya dari baris perintah

Buat file downloadfile.vbsdan masukkan baris kode berikut:

' 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

Jalankan dari baris perintah sebagai berikut:

cscript.exe downloadfile.vbs 
phuclv
sumber
1
Saya ingin tahu apakah ini bergantung pada Internet Explorer, tetapi saya kira ini akan menjadi jawaban yang bagus untuk "Jika satu-satunya browser di Windows mati, bagaimana cara terhubung ke Internet?" at superuser.com/questions/50427/… :-)
Arjan
itu jika izin untuk cscript.exe diizinkan
hello_there_andy
Saya dapat mengonfirmasi bahwa saya telah menguji skrip ini pada Windows PE 5.1 dan telah bekerja dengan sangat baik. Saya bermaksud menggunakannya untuk penyebaran offline, untuk memeriksa versi platform di drive USB terhadap file teks yang disimpan di server.
Wayfarer
74

Dimulai dengan Windows 7, saya percaya ada satu metode tunggal yang belum disebutkan itu mudah:

Sintaksis:

bitsadmin / transfer job_name        / unduhan / prioritas    URL URL   lokal \ path \ file

Contoh:

bitsadmin / transfer mydownloadjob / download / priority normal ^
                  http://example.com/filename.zip C: \ Users \ username \ Downloads \ filename.zip

(Dipecah menjadi dua baris terpisah ^agar mudah dibaca (untuk menghindari pengguliran).)

Peringatan: Seperti yang ditunjukkan dalam komentar, bitsadminpesan bantuan dimulai dengan mengatakan:

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.

... tetapi komentar lain melaporkan bahwa itu berfungsi pada Windows 8.

pergeseran waktu
sumber
16
itu adalah bagian dari windows7.
akira
3
tidak bekerja di windows 7 saya ...
jyz
3
Ini seharusnya menjadi jawaban terpilih. bitsadmin sudah usang karena Windows PowerShell.
lenkite
3
Konfirmasikan bekerja pada Win7
kaiser
7
Catatan: BITSAdmin sudah usang dan tidak dijamin akan tersedia di versi Windows yang akan datang. Alat administratif untuk layanan BITS sekarang disediakan oleh cmdlet BITS PowerShell.
Ujjwal Singh
39

Windows 7 menyertakan PowerShell dan ada banyak hal yang tidak dapat Anda lakukan dengan PowerShell.

Alternatif asli untuk wget di Windows PowerShell?

pengguna15130
sumber
16
(New-Object Net.WebClient) .DownloadFile ('someurl', 'somepath')
Jason Stangroome
3
Powershell adalah untuk Powerrangers ! Bagaimana kool itu dan mengapa sih aku tidak tahu tentang ini? Byebye cmd.
kaiser
17
dari cmd.exe: powershell -command "& { iwr http://www.it1.net/it1_logo2.jpg -OutFile logo.jpg }". juga berfungsi dari run prompt
Janus Troelsen
1
Ya, tidak ada yang tidak bisa kamu lakukan tanpa PowerShell. Ini adalah tarpit turing nyata :)
jcarpenter2
@JanusTroelsen versi PowerShell saya menjawab, "Istilah 'iwr' tidak diakui sebagai nama cmdlet, ..." tetapi setelah beberapa penyelidikan hal serupa ini berhasil:powershell -command "$clnt = new-object System.Net.WebClient; $clnt.DownloadFile(\"https://host/name\", \"outpufilename\")"
rogerdpack
25

PowerShell (disertakan dengan Windows 8 dan disertakan dengan .NET untuk rilis sebelumnya) memiliki kemampuan ini. The powershellperintah memungkinkan menjalankan perintah PowerShell sewenang-wenang dari baris perintah atau .batfile yang. Jadi, baris berikut adalah yang diinginkan:

powershell -command "& { (New-Object Net.WebClient).DownloadFile('http://example.com/', 'c:\somefile') }"
Nik
sumber
2
Ini tidak memberikan jawaban untuk pertanyaan itu. Untuk mengkritik atau meminta klarifikasi dari penulis, tinggalkan komentar di bawah posting mereka - Anda selalu dapat mengomentari posting Anda sendiri, dan setelah Anda memiliki reputasi yang cukup Anda akan dapat mengomentari posting apa pun .
harrymc
3
@harrymc yakin itu jawabannya. itu mengunduh file. apa lagi yang kamu inginkan?
Janus Troelsen
1
(1) Beberapa teks untuk menjelaskan apa artinya ini satu-liner, (2) Verifikasi bahwa jawaban Anda bukanlah formulasi alternatif untuk jawaban sebelumnya, karena jika ya, paling banyak harus dinyatakan sebagai komentar pada jawaban itu.
harrymc
Versi Windows dan PowerShell apa yang diperlukan agar ini berfungsi?
Peter Mortensen
2
ini tidak berfungsi di Windows Server 2012 FYI, ia melempar MethodInvocationException
knocte
17

Saya menemukan cara untuk melakukannya, tetapi sungguh, cukup instal Wget .

Anda dapat menggunakan Internet Explorer dari baris perintah (iexplore.exe) dan kemudian memasukkan URL sebagai argumen. Jadi, jalankan:

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

Apa pun file itu, Anda harus menentukannya tidak perlu konfirmasi sebelumnya. Lihatlah, itu akan secara otomatis melakukan pengunduhan. Jadi ya, secara teknis memungkinkan, tetapi tuan yang baik melakukannya dengan cara yang berbeda.

DHayes
sumber
Saya tahu wget adalah cara yang jauh lebih baik, itu hanya pertanyaan hipotetis;) Jawaban Anda datang cukup dekat, tetapi masih memerlukan intervensi pengguna (mengklik "Simpan", atau mengonfigurasi untuk tidak menampilkan dialog ini)
Robert Massa
3
Seperti saya katakan, Anda harus membatalkan pilihan untuk meminta untuk menyimpan untuk jenis file itu. Misalnya, unduh file zip, nonaktifkan prompt itu, dan kemudian di masa depan setiap file zip yang diakses dari baris perintah akan secara otomatis menyimpan.
DHayes
1
+1, meskipun saya belum memvalidasi kerjanya (tapi pernyataan terakhirnya sangat benar)
Arjan
1
1 untuk "Tuanku jangan lakukan ini" "... :)
quack quixote
12

Windows Explorer (jangan dikelirukan dengan Internet Explorer) dapat mengunduh file melalui HTTP. Cukup masukkan URL ke bilah Alamat. Atau dari baris perintah, misalnya C:\windows\explorer.exe http://somewhere.com/filename.ext,.

Anda mendapatkan prompt Unduh File klasik . Kecuali jika file tersebut adalah tipe yang Windows Explorer tahu cara menampilkan inline, (.html, .jpg, .gif), dalam hal ini Anda perlu klik kanan untuk menyimpannya.

Saya baru saja menguji ini pada gambar VMware saya dari instalasi perawan Windows XP 2002 SP1, dan itu berfungsi dengan baik.

Chris Noe
sumber
4
ini membutuhkan interaksi pengguna. mungkin bukan apa yang kebanyakan orang ingin mengunduh file dari command prompt inginkan
Kip
Saat ini, itu tergantung pada browser default Anda. Tambang saya adalah chrome, dan ini mengunduh secara otomatis ke lokasi yang diketahui, jadi saya menganggap solusi ini cukup untuk kebutuhan saya. Terima kasih!
kayleeFrye_onDeck
7

Anda dapat menggunakan (dalam kelelawar Windows standar):

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

Tampaknya membutuhkan PowerShell v4 ...

(Terima kasih atas komentar itu dan yang ini )

Anthony O.
sumber
6

Gunakan FTP.

Dari baris perintah:

ftp ftp.somesite.com
user
password

dll. FTP termasuk dalam setiap versi Windows yang dapat saya ingat; mungkin tidak di 3.1, mungkin tidak di Windows 95 , tapi yang pasti semuanya setelah itu.

@RM: Ini akan menjadi kasar jika Anda tidak ingin mengunduh alat lain. Ada baris perintah Wget untuk Windows dan Wget dirancang untuk melakukan persis apa yang Anda minta.

Satanicpuppy
sumber
+1 jawaban yang bagus. ftp cukup universal, selama server yang Anda coba unduh mendukungnya.
DaveParillo
Terima kasih, maaf saya tidak lebih spesifik, maksud saya menggunakan HTTP.
Robert Massa
1
Ini tidak akan berfungsi dengan sebagian besar server FTP karena mode pasif tidak didukung oleh klien ftp Windows ini (dengan NAT di antara mode pasif diperlukan).
Peter Mortensen
@PeterMortensen Itu juga tidak menjawab pertanyaan sejak jauh karena dia mengeditnya untuk menentukan dia sedang mencari fungsionalitas wget. Tapi jangan biarkan itu menghentikan Anda dari membangkitkan kembali jawaban yang salah berusia 7 tahun hanya untuk menambah kesedihan.
Satanicpuppy
4

Gunakan PowerShell seperti ini:

  1. Buat file download.ps1:

    param($url, $filename)
    $client = new-object System.Net.WebClient 
    $client.DownloadFile( $url, $filename)
    
  2. Sekarang Anda dapat mengunduh file seperti ini:

    powershell Set-ExecutionPolicy Unrestricted
    powershell -ExecutionPolicy RemoteSigned -File "download.ps1" "http://somewhere.com/filename.ext" "d:\filename.ext"
    
Thomas Jespersen
sumber
Ini berfungsi, bahkan pada Windows XP 64-bit, PowerShell 2.0.
Peter Mortensen
1

Jika Anda menginstal Telnet, saya kira Anda bisa membuat permintaan HTTP ke server untuk mengunduh file.

Anda juga dapat menginstal Cygwin , dan menggunakan wget untuk mengunduh file juga. Ini adalah cara yang sangat mudah untuk mengunduh file dari baris perintah.

EvilChookie
sumber
2
Saya cukup yakin 'cygwin' dianggap sebagai utilitas non-standar ;-)
DaveParillo
Telnet adalah opsi yang menarik, apakah ada cara untuk mem-pipe output ke file tanpa merusaknya? Dan bisakah kita mengirim perintah HTTP GET ke telnet untuk mengajukan permintaan?
Robert Massa
Instal telnet? Telnet seperti ftp; itu datang dengan windows. Tidak tahu tentang mengarahkan output.
Satanicpuppy
Untuk XP (seperti dalam pertanyaan) telnet diinstal secara default, tetapi saya mendengar bahwa pada Vista itu tidak lagi terjadi? Tapi tidak, itu tidak memungkinkan untuk unduhan file, kecuali semua dikembalikan dalam satu respons HTTP, dan orang dapat menghapus header dan mendekode hal-hal pada baris perintah juga. Sangat tidak mungkin orang bisa mengendalikan itu.
Arjan
1
Mengapa menginstal cygwin hanya untuk menggunakan wget? Ada biner win32 asli yang tersedia.
innaM
1

Ada beberapa cara yang dapat Anda unduh menggunakan baris perintah di Windows:

  1. Anda bisa menggunakan Cygwin .

    Catatan: aplikasi yang disertakan bukan aplikasi Linux asli. Anda harus membangun kembali aplikasi Anda dari sumber jika ingin dijalankan di Windows.

  2. Menggunakan telnet dimungkinkan untuk membuat permintaan tetapi Anda tidak akan melihat pemrosesan apa pun.

  3. Anda dapat menulis skrip kelelawar atau VBS.

  4. Tulis program Anda sendiri yang dapat Anda jalankan dari cmd.exe.

Yesus
sumber
1

Anda dapat menginstal aplikasi Linux Wget di Windows. Itu dapat diunduh dari http://gnuwin32.sourceforge.net/packages/wget.htm . Anda kemudian dapat mengeluarkan perintah 'wget (inserturlhere)' atau URL lainnya di command prompt Anda, dan itu akan memungkinkan Anda untuk mengunduh URL / file / gambar itu.

Peter Mortensen
sumber
1
Anehnya, versi ini tidak selalu kompatibel. Di komputer Windows 7 saya bukan karena perpustakaan hilang. Anda ingin menggunakan wget tanpa perpustakaan ekstra sebagian besar waktu. users.ugent.be/~bpuype/wget
sinni800
0

Di Windows default, Anda tidak dapat mengunduh melalui HTTP. Windows adalah OS berbasis GUI, jadi ia tidak memiliki banyak alat commandline yang Anda temukan di OS lain, seperti wget, yang akan menjadi kandidat utama.

System.Net.WebClient.DownloadFile(), sebuah fungsi di WiniNetAPI, dapat mengunduh file, tapi saya tidak yakin seberapa jauh Anda masuk ke pengembangan aktual vs file batch.

Andrew Scagnelli
sumber
Saya mengerti mungkin menggunakan wget, tetapi pertanyaan saya menyatakan tanpa menggunakan utils windows non-standar.
Robert Massa
0

Jika Anda memasang python, inilah contoh yang mengambil get-pip.py dari web

python -c "import urllib; urllib.urlretrieve ('https://bootstrap.pypa.io/get-pip.py', r'C:\python27\Tools\get-pip.py')"
Sipherlab
sumber