Powershell'de dosyalar nasıl zip / unzip edilir?


Yanıtlar:


21

DotNetZip , bunu PowerShell'den yapmanıza izin verecektir. Tek bir astar değildir, ancak kütüphane ihtiyacınız olan PowerShell betiğini yazmanıza izin verecektir.

COM arabirimini de kullanabilirsiniz, Windows PowerShell ile Dosyaları Sıkıştırma bölümüne bakın ve ardından bir Windows Vista Kenar Çubuğu Gadget'ı paketleyin .

Googling "zip powershell" veya "unzip powershell" de yararlı sonuçlara yol açabilir.


+1 Bağlantılı makale en çok oy alan cevabın aksine yararlı görevlere sahiptir
Ruben Bartelink

5
Google araması önermek için -1. Bu "unzip powershell" için bir Google aramalarında en Stack Exchange sonucudur
özlemi makinesinde

154

Bu, herhangi bir harici araç kullanmadan tamamen Powershell'den yapabilirsiniz. Bu, geçerli çalışma dizinine test.zip adlı bir dosyayı açar.

$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())

26
Mevcut dosyaların üzerine yazmak için $ destination.Copyhere ($ zip_file.items (), 0x10) kullanın. 0x4 iletişim kutusunu gizler ve 0x14 bunları birleştirir ve iletişimin üzerine yazar ve gizler.
Peter,

3
Satır $destination.Copyhere($zip_file.items())gerçek açmayı yapar.
Jonathan Allen

2
İsterseniz yukarıdakileri bir işleve koyabilirsiniz: 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 11

6
Bu kabul edilen cevap olmalı.
tugberk

2
Zip dosyası sadece bir klasör içerdiğinde bu benim için başarısız olur (eşyalar boştur)
James Woolfenden 19:14

56

Şimdi .NET Framework 4.5'te , bunun gibi kullanabileceğiniz bir ZipFile sınıfı var:

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

1
Bu olur ExtractToDirectory için basit bir yöntem ve mevcut tüm dosyaların üzerine bir seçenek olsaydı harika olacak.
James Dunne

1
Bu, .NET 4.5 ile çalışır. Bununla birlikte Powershell V3'e de ihtiyacınız var.
DalSoft 16:13

3
Düzeneği Add-Type ile yükleyin, örneğin: Add-Type -AssemblyName System.IO.Compression.FileSystem
Mike

2
@JamesDunne - Saklamanız gereken başka bir dosyanız yoksa, 'Remove-Item -Recurse $ TargetFolder' öğesini kullanabilir. Aksi takdirde, istediğiniz ne yapılabilir, ama önemsiz olurdu. Zip'i okumak için açmanız ve daha sonra önceki herhangi bir hedef nesneyi silmeniz ve yenisini açmadan önce zip çekmeniz gerekir. Şanslıyım ki, kolay çözüm işe yarıyor. ;)
Mike

3
Göreli dosya konumlarının PowerShell'i değil , .NET geçerli dizinini kullanacağı konusunda uyarılırsınız . Buraya bakınız . Muhtemelen sadece tartışmalara daha iyi gelir . (Resolve-Path $someDir).Path
jpmc26

18

Bunun için özel olarak cmdlet'leri olan PowerShell Topluluk Uzantılarını (PSCX) incelemek isteyebilirsiniz .


1
+1 PSCX harika bir eklenti cmdlet setidir - Keşke hangisini istediğimi ve hangisini istemeyeceğimi seçebilseydim. Powershell örneğindeki bir sürü şeyi değiştiriyor gibi görünüyor ....
marc_s

Bununla karşılaştım, çünkü bazı iş arkadaşları için yapabiliyorsam PSCX kurulumunu otomatikleştirmek istiyorum. Ne tür sorunlarla karşılaştığımı görmek için şimdi deniyorum
jcolebrand 15


5

Sadece yıllardır kullandığım infozip ikili dosyalarını kullanıp UNIX ortamında kullanmak için en basit çözümü buluyorum.

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.

Metin çıktısının etrafına bir powershell sargısı koymak zor olabilir ancak pratikte asla buna ihtiyacım olmadı, bu yüzden rahatsız etmedim.

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


5

Ayrıca, Bilgi-ZIP'ı (diğer birçok Zip yardımcı programında bulunan Zip motoru) ve 7-Zip'i , hem GUI hem de komut satırı Zip yardımcı programına sahip olan başka bir favoriyi seviyorum . Asıl mesele, çoğu PowerShell görevinde çalışacak bazı iyi komut satırı yardımcı programları var.

PowerShell ile oluşturulmamış komut satırı yardımcı programlarını çalıştırmanın bazı püf noktaları var:

  • Adında bir numara ile başlayan bir çalıştırılabilir dosyayı çalıştırmak, onu bir Ampersand (&) ile işaretleyin.

    & 7zip.exe

  • Her simgeyi kaydırın, yardımcı program komut satırından tırnak işaretleri içinde görmeyi bekliyor.

    & "c: \ boşluk \ path \ SomeCommand.exe" "/ parametre2" "/ parametre2" "" parametre2'nin Değeri "" Değer2 `" bir alıntı ile "

Bunu dene:

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

Ya da:

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

2

James Holwell Cevabınızı beğendim ama biraz genişlettim

# Example
#unzip "myZip.zip" "C:\Users\me\Desktop" "c:\mylocation"
function unzip($fileName, $sourcePath, $destinationPath)
{
    $shell = new-object -com shell.application
    if (!(Test-Path "$sourcePath\$fileName"))
    {
        throw "$sourcePath\$fileName does not exist" 
    }
    New-Item -ItemType Directory -Force -Path $destinationPath -WarningAction SilentlyContinue
    $shell.namespace($destinationPath).copyhere($shell.namespace("$sourcePath\$fileName").items()) 
}



0

Dosyaları senkronize bir şekilde sıkıştırmak ve açmak için yerel Windows işletim sistemi komutlarını kullanan PowerShell 2.0 uyumlu bir modül oluşturdum. Bu, Windows XP gibi daha eski işletim sistemlerinde çalışır ve .Net 4.5 veya başka bir harici araç gerektirmez. İşlevler, dosyaların tümü sıkıştırılmış / açılmış olana kadar komut dosyasının yürütülmesini de engeller. Sen olabilir daha fazla bilgi ve burada Blogumda modülünü bulmak .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.