ファイル圧縮形式といえば近頃もっぱらzipです。
データを送ってもらったら時間ごとに大量のzipアーカイブファイルに固められていた、なんてケースは珍しくありません(私だけ?)。
二つ以上、解凍しないといけないzipファイルがあったらもう自動化しないとやってられませんね。フリーソフトを使ってもいいのですが、Windowsの標準機能でも十分な場合もあります。
ということでPowershellでバッチ化してしまいましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | # search and expand zip archives $basedir = "path to parent directory like (C:\dir\subdir)"; Write-Host "Search zip files..." $zipfiles = Get-ChildItem $basedir -Recurse | Where-Object {$_.Extension -eq ".zip"} Write-Host "Expand zip files..." foreach ($item in $zipfiles){ Write-Host $item.Name -ForegroundColor Green # create directory $destination = $item.FullName; $destination = $destination.Substring(0, $destination.Length - ($item.Extension).Length); $buffer = New-Item -Path $destination -ItemType Directory # expand into created directory Expand-Archive -Path $item.FullName -DestinationPath $destination } |
この例では、指定されたディレクトリ($basedir
)以下のzipファイルを再帰的に検索し、Windows標準の機能で解凍(Expand-Archive
)しています。
解凍先として、アーカイブファイル名と同じディレクトリを新規に作成しています。
この方法の弱点のひとつは、パスワード保護付きのzipアーカイブを解凍できない、ということ。
その場合は7zとかサードパーティの実行ファイルをCLIで呼ぶ方法で対応できますが、それはまた今度。