PowerShellでファイル(* .Zip)を圧縮/解凍するワンライナーはありますか?
DotNetZip を使用すると、PowerShellからこれを実行できます。ワンライナーではありませんが、ライブラリを使用すると、必要なPowerShellスクリプトを記述できます。
COMインターフェイスを使用することもできます。Windows PowerShellでファイルを圧縮してから、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())
.NET Framework 4.5では、次のように使用できるZipFileクラスがあります。
[System.Reflection.Assembly]::LoadWithPartialName('System.IO.Compression.FileSystem')
[System.IO.Compression.ZipFile]::ExtractToDirectory($sourceFile, $targetFolder)
チェックアウトすることをお勧めします PowerShell Community Extensions(PSCX) これには、このためのコマンドレットがあります。
これは非常に古い質問であることは知っていますが、現在の回答を投稿するつもりかと思ってTwitterでリンクされているのを見ました。
現在Windows 10または Windows Management Framework 5 Production Preview で利用可能なPowerShell 5には、「zip圧縮」と「unzip圧縮」用の2つの組み込みコマンドレットが付属しています。
私が長年使用していて、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ユーティリティの両方を備えています。つまり、ほとんどの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)
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())
}
ネイティブのWindows OSコマンドを使用してファイルをZipで圧縮および同期解凍するPowerShell 2.0互換モジュールを作成しました。これは、Windows XPなどの古いOSで機能し、.Net 4.5やその他の外部ツールを必要としません。関数はまた、ファイルがすべて圧縮/解凍されるまでスクリプトの実行をブロックします。あなたはすることができます ここに私のブログの詳細とモジュールを見つける 。
WinRAR は、CMDモードで動作し、引数を受け入れます