Pertanyaan Bagaimana cara zip / unzip file di Powershell?


Apakah ada satu-liner yang akan zip / unzip file (* .zip) di PowerShell?


103
2018-06-03 15:57




terkait: Unzip dengan PS di Server Core - Ruben Bartelink


Jawaban:


DotNetZip akan memungkinkan Anda melakukan ini dari PowerShell. Ini bukan satu-liner, tetapi perpustakaan akan memungkinkan Anda untuk menulis skrip PowerShell yang Anda butuhkan.

Anda juga dapat menggunakan antarmuka COM, lihat Kompres File dengan Windows PowerShell kemudian paketkan Windows Vista Sidebar Gadget.

Googling "zip powershell" atau "unzip powershell" mungkin juga akan memunculkan hasil yang bermanfaat.


21
2018-06-03 16:02



+1 Artikel terkait memiliki Tugas yang bermanfaat tidak seperti jawaban yang paling banyak dijawab - Ruben Bartelink
-1 untuk menyarankan pencarian Google. Ini adalah hasil StackExchange teratas dalam pencarian Google untuk "unzip powershell" - machine yearning


Ini adalah bagaimana Anda dapat melakukannya murni dari Powershell tanpa alat eksternal. Ini membuka file yang disebut test.zip ke direktori kerja saat ini:

$shell_app=new-object -com shell.application
$filename = "test.zip"
$zip_file = $shell_app.namespace((Get-Location).Path + "\$filename")
$destination = $shell_app.namespace((Get-Location).Path)
$destination.Copyhere($zip_file.items())

154
2017-11-14 01:36



gunakan $ destination.Copyhere ($ zip_file.items (), 0x10) untuk menimpa file yang ada. 0x4 menyembunyikan kotak dialog, dan 0x14 menggabungkan ini dan menimpa dan menyembunyikan dialog. - Peter
Garis $destination.Copyhere($zip_file.items()) melakukan unziping yang sebenarnya. - Jonathan Allen
Anda dapat membagi paket di atas menjadi fungsi, jika Anda ingin: function unzip($filename) { if (!(test-path $filename)) { throw "$filename does not exist" } $shell = new-object -com shell.application $shell.namespace($pwd.path).copyhere($shell.namespace((join-path $pwd $filename)).items()) } - James Holwell
Ini harus menjadi jawaban yang diterima. - tugberk
Ini gagal untuk saya ketika file zip hanya berisi folder (item kosong) - James Woolfenden


Sekarang di .NET Framework 4.5, ada a ZipFile kelas yang dapat Anda gunakan seperti ini:

[System.Reflection.Assembly]::LoadWithPartialName('System.IO.Compression.FileSystem')
[System.IO.Compression.ZipFile]::ExtractToDirectory($sourceFile, $targetFolder)

56
2017-12-30 17:46



Saya t pastinya bekerja - Saya menggunakannya untuk mengekstrak lebih dari 400 file zip. Saya akan memeriksa untuk memastikan saya tidak memiliki 4,5 di sini, tetapi tidak muncul di bawah Microsoft.NET. - GalacticCowboy
Ini akan menjadi hebat jika ada metode sederhana untuk ExtractToDirectory dan opsi untuk menimpa semua file yang ada. - James Dunne
Muat perakitan dengan Add-Type, misalnya: Add-Type -AssemblyName System.IO.Compression.FileSystem - Mike
@JamesDunne - Jika Anda tidak memiliki file lain yang perlu Anda pertahankan, bisa menggunakan 'Remove-Item -Recurse $ TargetFolder'. Kalau tidak, apa yang Anda inginkan bisa dilakukan, tetapi itu tidak akan sepele. Anda akan perlu membuka zip untuk dibaca, dan kemudian berjalan zip, menghapus objek target sebelumnya dan membongkar yang baru. Beruntung bagi saya, solusi mudah bekerja. ;) - Mike
Diperingatkan bahwa lokasi file relatif akan menggunakan .BERSIH direktori saat ini, tidak satu PowerShell. Lihat sini. Mungkin lebih baik begitu saja (Resolve-Path $someDir).Path argumennya. - jpmc26


Anda mungkin ingin memeriksanya Ekstensi Komunitas PowerShell (PSCX) yang memiliki cmdlet khusus untuk ini.


18
2018-06-03 15:59



+1 PSCX adalah kumpulan besar add-on cmdlet - Saya hanya berharap dapat memilih lebih banyak mana yang saya inginkan dan mana yang tidak. Tampaknya akan berubah banyak dalam contoh Powershell saya .... - marc_s
Saya telah menemukan ini karena saya sebenarnya ingin mengotomatisasi instalasi PSCX jika saya bisa untuk beberapa rekan kerja. Coba sekarang untuk melihat masalah apa yang saya hadapi - jcolebrand


Saya tahu ini adalah pertanyaan yang sangat lama, tetapi saya melihatnya terhubung di Twitter dan saya akan memberikan jawaban saat ini.

PowerShell 5, saat ini tersedia di Windows 10 atau melalui Kerangka Kerja Manajemen Windows 5 Pratinjau Produksi, dilengkapi dengan dua cmdlet built-in untuk 'zipping' dan 'unzipping':


14
2017-10-17 20:59



Ini adalah sebuah baik hal untuk memberikan informasi baru ke pertanyaan lama. ;) +1 - jpmc26


Saya menemukan solusi paling sederhana untuk hanya menggunakan biner infozip yang telah saya gunakan selama bertahun-tahun dan digunakan dalam lingkungan UNIX.

PS> zip -9r ../test.zip * 
PS> cd .. 
PS> unzip -t test.zip Archive:  test.zip
    testing: LinqRepository/          OK
    testing: LinqRepository/ApplicationService.cs   OK
    testing: LinqRepository/bin/      OK 
... 
No errors detected in compressed data of test.zip.

Akan sangat sulit untuk menempatkan pembungkus powershell di sekitar output teks tetapi dalam prakteknya saya tidak membutuhkan itu jadi saya tidak terganggu.

http://www.info-zip.org/


5
2017-08-03 19:40





saya juga suka Info-ZIP (mesin Zip ditemukan di sebagian besar utilitas Zip lainnya) dan 7-Zip, favorit lain yang memiliki utilitas GUI dan command line Zip. Intinya adalah, ada beberapa utilitas baris perintah yang baik yang akan bekerja untuk sebagian besar tugas PowerShell.

Ada beberapa trik untuk menjalankan utilitas command line yang tidak dibangun dengan PowerShell dalam pikiran:

  • Menjalankan eksekusi yang dimulai dengan angka dalam nama, kata pengantar dengan Ampersand (&).

    & 7zip.exe

  • Bungkus setiap token, utilitas mengharapkan untuk melihat dari baris perintah, dalam tanda kutip.

    & "c: \ path dengan spasi \ SomeCommand.exe" "/ parameter2" "/ parameter2" "parameter2 Nilai" "Value2`" dengan kutipan "

Coba ini:

zip filename.zip (Get-ChildItem somepath\*)

Atau bahkan:

zip filename.zip (Get-Content ListOfFiles.txt)

5
2017-08-11 15:07