回答:
DotNetZipでは、PowerShellからこれを行うことができます。ワンライナーではありませんが、ライブラリを使用すると、必要なPowerShellスクリプトを記述できます。
COMインターフェイスを使用することもできます。WindowsPowerShellでファイルを圧縮し、Windows Vistaサイドバーガジェットをパッケージ化するをご覧ください。
「zip powershell」または「unzip powershell」をグーグルで検索しても、有用な結果が得られる場合があります。
これは、外部ツールなしで純粋に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())
$destination.Copyhere($zip_file.items())
は実際の解凍を行います。
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()) }
.NET Framework 4.5には、次のように使用できるZipFileクラスがあります。
[System.Reflection.Assembly]::LoadWithPartialName('System.IO.Compression.FileSystem')
[System.IO.Compression.ZipFile]::ExtractToDirectory($sourceFile, $targetFolder)
あなたは、チェックアウトしたいと思うかもしれPowerShellのコミュニティの拡張機能(PSCX)このために特別のコマンドレットがあります。
私が長年使用し、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ラッパーを配置することは簡単ですが、実際にはそれを必要としないので、気にしませんでした。
また、Info-ZIP(他のほとんどのZipユーティリティにあるZipエンジン)と7-Zipも好きです。これは、GUIとコマンドラインの両方のZipユーティリティを備えたもう1つのお気に入りです。要点は、ほとんどのPowerShellタスクで機能する優れたコマンドラインユーティリティがあることです。
PowerShellを念頭に置いて構築されていないコマンドラインユーティリティを実行するには、いくつかのトリックがあります。
名前の番号で始まる実行可能ファイルを実行し、アンパサンド(&)を先頭に付けます。
&7zip.exe
各トークンをラップします。ユーティリティは、コマンドラインから引用符で囲むことを期待しています。
& "c:\ path with space \ SomeCommand.exe" "/ parameter2" "/ parameter2" "parameter2の値" "Value2` "引用符付き"
これを試して:
zip filename.zip (Get-ChildItem somepath\*)
あるいは:
zip filename.zip (Get-Content ListOfFiles.txt)
ジェームズ・ホルウェルあなたの答えは好きですが、少し拡大しました
# 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())
}
ネイティブのWindows OSコマンドを使用して、同期方式でファイルを圧縮および圧縮解除するPowerShell 2.0互換モジュールを作成しました。これは、Windows XPなどの古いOSで動作し、.Net 4.5またはその他の外部ツールを必要としません。また、ファイルがすべて圧縮/解凍されるまで、関数はスクリプトの実行をブロックします。こちらのブログで詳細とモジュールを見つけることができます。