PowerShellは、Windows環境での作業を効率化する強力なツールです。その中でも、ZIPファイルの解凍に使える「Expand-Archive」コマンドは、ファイル操作をスクリプトで自動化したい方にとって非常に便利なコマンドです。
GUIでの解凍操作は直感的ですが、大量のファイルや定期的な処理では手間がかかります。そんなときこそ、PowerShellの出番です。この記事では「Expand-Archive」の基本的な使い方から応用テクニックまで、初心者にもわかりやすく丁寧に解説します。ぜひ、日常業務の自動化や効率化に役立ててください。
Expand-Archiveとは?
Expand-Archive
は、PowerShellでZIPファイルを展開(解凍)するためのコマンドレットです。Windows PowerShell 5.0以降に標準搭載されており、追加のソフトウェアをインストールすることなく使用できます。
このコマンドは、Windowsに内蔵されている「Microsoft.PowerShell.Archive」モジュールの一部であり、圧縮されたアーカイブファイル(主に.zip
)を、指定したディレクトリに解凍する機能を提供します。
基本構文は以下のとおりです。
Expand-Archive -Path <ZIPファイルのパス> -DestinationPath <展開先フォルダ>
基本的な使い方
例:ZIPファイルを解凍する
たとえば、C:\Temp\sample.zip
というファイルをC:\Temp\unzipped
に解凍したい場合、以下のように記述します。
Expand-Archive -Path "C:\Temp\sample.zip" -DestinationPath "C:\Temp\unzipped"
このコマンドを実行すると、ZIPファイル内の内容が指定したフォルダに展開されます。
フォルダが存在しない場合
-DestinationPath
で指定したフォルダが存在しない場合、自動でフォルダが作成されます。つまり、あらかじめディレクトリを用意しておく必要はありません。
上書き展開をしたい場合
既に展開先のフォルダに同名のファイルやフォルダが存在する場合、通常はエラーになります。
このようなときは、-Force
パラメータを追加することで、既存ファイルを上書きして展開することができます。
Expand-Archive -Path "C:\Temp\sample.zip" -DestinationPath "C:\Temp\unzipped" -Force
ワイルドカードは使える?
Expand-Archive
は、-Path
パラメータにワイルドカード(*
など)をサポートしていません。複数のZIPファイルを一括で展開したい場合は、Get-ChildItem
とForEach-Object
を組み合わせる必要があります。
例:フォルダ内のすべてのZIPファイルを一括解凍する
Get-ChildItem "C:\Temp\zips" -Filter *.zip | ForEach-Object {
$dest = "C:\Temp\unzipped\$($_.BaseName)"
Expand-Archive -Path $_.FullName -DestinationPath $dest -Force
}
このスクリプトでは、C:\Temp\zips
内のすべてのZIPファイルを、それぞれのファイル名ごとに別フォルダに展開します。
展開後の確認をするには
展開が成功したかを確認するためには、以下のように対象ディレクトリの内容を表示させるとよいでしょう。
Get-ChildItem -Path "C:\Temp\unzipped"
あるいは、Test-Path
でフォルダやファイルの存在確認を行うこともできます。
Test-Path "C:\Temp\unzipped\readme.txt"
注意点とトラブルシューティング
ファイルが壊れている場合
ZIPファイルが壊れていると、Expand-Archive
は例外を返します。このような場合、Try-Catch
でエラー処理を加えておくとスクリプトが中断しません。
try {
Expand-Archive -Path "C:\Temp\sample.zip" -DestinationPath "C:\Temp\unzipped"
} catch {
Write-Error "解凍に失敗しました: $_"
}
ZIP以外のファイル形式には非対応
Expand-Archive
は.zip
ファイル専用です。.rar
や.7z
などの他の圧縮形式には対応していません。他形式を解凍したい場合は、7-ZipのCLIなどを使う必要があります。
スクリプトに組み込む応用例
毎日決まった時間にZIPファイルを解凍する
Windowsタスクスケジューラと組み合わせれば、毎日特定のフォルダに格納されたZIPファイルを自動で解凍する仕組みも作れます。
例として、以下のスクリプトを .ps1
ファイルとして保存します。
$today = Get-Date -Format "yyyyMMdd"
$zipFile = "C:\Backup\$today.zip"
$destFolder = "C:\Backup\unzipped\$today"
if (Test-Path $zipFile) {
Expand-Archive -Path $zipFile -DestinationPath $destFolder -Force
}
このスクリプトをスケジューラで毎日実行すれば、日付ごとのZIPファイルを自動で展開できます。
まとめ
Expand-Archive
コマンドは、PowerShellでZIPファイルを簡単に展開できる便利なツールです。基本的な使い方はシンプルで、初心者にもすぐに扱える点が魅力です。
上書き展開や一括処理、スケジューラとの連携など、応用方法も多く、業務効率化には欠かせません。
PowerShellの力を活用して、ファイル管理の自動化や定型処理をスマートにこなしていきましょう。