sviluppo-web-qa.it

Come comprimere / decomprimere i file in Powershell?

Esiste un one-liner che comprime/decomprime i file (* .Zip) in PowerShell?

105
BlueGene

DotNetZip ti consentirà di farlo da PowerShell. Non è una riga, ma la libreria ti permetterà di scrivere lo script PowerShell che ti serve.

È inoltre possibile utilizzare l'interfaccia COM, vedere Comprimi i file con Windows PowerShell, quindi impacchetta un gadget della barra laterale di Windows Vista.

Googling "Zip powershell" o "decomprimi powershell" potrebbe anche rivelare risultati utili.

21
Kevin Kuphal

Ecco come è possibile farlo esclusivamente da Powershell senza strumenti esterni. Questo decomprime un file chiamato test.Zip nella directory di lavoro corrente:

$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())
155
Ameer Deen

Ora in .NET Framework 4.5, esiste una classe ZipFile che puoi usare in questo modo:

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

Potresti voler dare un'occhiata a The PowerShell Community Extensions (PSCX) che ha dei cmdlet specifici per questo.

18
Kevin Colby

So che questa è una domanda molto vecchia, ma l'ho appena vista collegata su Twitter e ho pensato di pubblicare una risposta attuale.

PowerShell 5, attualmente disponibile su Windows 10 o tramite Windows Management Framework 5 Production Preview , include due cmdlet integrati per "zippare" e "decomprimere":

16
Windos

Trovo la soluzione più semplice per usare solo i binari di infozip che ho usato per anni e usare in un ambiente 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.

Sarebbe semplice mettere un wrapper PowerShell attorno all'output del testo, ma in pratica non ne ho mai avuto bisogno, quindi non mi sono preoccupato.

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

5
Brian Reiter

Mi piace anche Info-Zip (il motore Zip presente nella maggior parte delle altre utility Zip) e 7-Zip , un altro preferito che ha sia una GUI che un'utilità Zip da riga di comando. Il punto è che ci sono alcune buone utility da riga di comando che funzioneranno per la maggior parte delle attività di PowerShell.

Esistono alcuni trucchi per eseguire le utility da riga di comando che non sono state create pensando a PowerShell:

  • L'esecuzione di un eseguibile che inizia con un numero nel nome, lo prefigura con una e commerciale (&).

    & 7Zip.exe

  • Avvolgi ogni token, l'utilità si aspetta di vedere dalla riga di comando, tra virgolette.

    & "c:\percorso con spazio\SomeCommand.exe" "/ parametro2" "/ parametro2" "Valore parametro2" "Valore2` "con un preventivo"

Prova questo:

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

O anche:

Zip filename.Zip (Get-Content ListOfFiles.txt)
5
Nathan Hartley

James Holwell Mi piace la tua risposta ma l'ho ampliata un po '

# 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()) 
}
2
Nico

Ho creato un modulo compatibile con PowerShell 2.0 che utilizza i comandi del sistema operativo Windows nativo per comprimere e decomprimere i file in modo sincrono. Funziona su sistemi operativi meno recenti, come Windows XP, e non richiede .Net 4.5 o altri strumenti esterni. Le funzioni bloccheranno anche l'esecuzione degli script fino a quando tutti i file non saranno stati compressi/decompressi. Puoi trovare maggiori informazioni e il modulo sul mio blog qui .

0
deadlydog

WinRAR può funzionare in modalità CMD accettando argomenti

0
adopilot

L'approccio ionic oscilla:

https://dotnetzip.codeplex.com/wikipage?title=PS-Examples

supporta password, altri metodi di crittografia, ecc.