web-dev-qa-db-ja.com

Powershellでファイルを圧縮/解凍する方法は?

PowerShellでファイル(* .Zip)を圧縮/解凍するワンライナーはありますか?

105
BlueGene

DotNetZip を使用すると、PowerShellからこれを実行できます。ワンライナーではありませんが、ライブラリを使用すると、必要なPowerShellスクリプトを記述できます。

COMインターフェイスを使用することもできます。Windows PowerShellでファイルを圧縮してから、Windows Vistaサイドバーガジェットをパッケージ化するを参照してください。

「Zip powershell」または「unzip powershell」をグーグルすると、有用な結果が表示される場合があります。

21
Kevin Kuphal

これは、外部ツールを使用せずにPowershellから純粋に実行できる方法です。これにより、test.Zipというファイルが現在の作業ディレクトリに解凍されます。

$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

.NET Framework 4.5では、次のように使用できるZipFileクラスがあります。

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

チェックアウトすることをお勧めします PowerShell Community Extensions(PSCX) これには、このためのコマンドレットがあります。

18
Kevin Colby

これは非常に古い質問であることは知っていますが、現在の回答を投稿するつもりかと思ってTwitterでリンクされているのを見ました。

現在Windows 10または Windows Management Framework 5 Production Preview で利用可能なPowerShell 5には、「zip圧縮」と「unzip圧縮」用の2つの組み込みコマンドレットが付属しています。

16
Windos

私が長年使用していて、UNIX環境で使用しているinfozipバイナリを使用する最も簡単な解決策を見つけました。

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.

テキスト出力の周りにPowerShellラッパーを配置するのは簡単ですが、実際には必要ないので、気にしません。

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

5
Brian Reiter

私は Info-Zip (他のほとんどのZipユーティリティにあるZipエンジン)と 7-Zip も好きです。これは、GUIとコマンドラインZipユーティリティの両方を備えています。つまり、ほとんどのPowerShellタスクで機能する優れたコマンドラインユーティリティがいくつかあります。

PowerShellを考慮して構築されていないコマンドラインユーティリティを実行するには、いくつかのトリックがあります。

  • 名前が数字で始まる実行可能ファイルを実行し、その前にアンパサンド(&)を付けます。

    &7Zip.exe

  • 各トークンをラップすると、ユーティリティはコマンドラインから引用符で囲まれることを期待しています。

    & "c:\ path with space\SomeCommand.exe" "/ parameter2" "/ parameter2" "parameter2's Value" "Value2` "with a quote"

これを試して:

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

あるいは:

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

James Holwell君の答えは好きだけど少しだけ広げた

# 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

ネイティブのWindows OSコマンドを使用してファイルをZipで圧縮および同期解凍するPowerShell 2.0互換モジュールを作成しました。これは、Windows XPなどの古いOSで機能し、.Net 4.5やその他の外部ツールを必要としません。関数はまた、ファイルがすべて圧縮/解凍されるまでスクリプトの実行をブロックします。あなたはすることができます ここに私のブログの詳細とモジュールを見つける

0
deadlydog

WinRAR は、CMDモードで動作し、引数を受け入れます

0
adopilot

ionicアプローチロック:

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

パスワード、その他の暗号化方式などをサポートします。