PowerShellでサブフォルダをzipファイルにアーカイブする

powershell コンピュータ
powershell
PDFから画像を抽出しzipファイルにアーカイブする方法を探していたのですが、PDFからサブフォルダに画像抽出してくれるソフトを見つけました。
窓の杜
「PDF画像抽出ツール」PDFドキュメントに含まれる画像データを簡単に抽出できるツール

処理したいPDFファイルをドラックアンドドロップするだけです。
出来上がった画像をサブフォルダごとzipファイルにアーカイブすれば目的がかなうのですが、処理したいPDFファイルが多数あり、アーカイブ処理が面倒です。
というわけでサブフォルダを連続してzipファイルにアーカイブするスクリプトを作ってみました。
<#
    サブフォルダをzipファイルでアーカイブする。

    使い方
    PS>.\SubFolderToZip.ps1 <対象フォルダのパス>
#>


param([string]$FolderPath = ".")

ls $FolderPath -Directory | % {
    $SubFolder = $_.FullName 
    $ZipPath = Join-Path $_.Parent.FullName ($_.BaseName + ".zip")

    ls -LiteralPath $SubFolder -File | Compress-Archive -DestinationPath $ZipPath
}

もう少し頭をひねると全てパイプラインでつなげてワンライナーに出来そうな気もしますが、自分にはこの辺りが限界でした。

Compress-Archiveにはフォルダ(ディレクトリ)を指定するオプションもありますが、zipファイル内にサブフォルダが出来上るのが好みでないので、ファイルを一件一件zipファイルに追加するような作りしてあります。
この作りだと、追加するファイルをフィルタリングが容易になります。lsのfilterオプションを使って特定の拡張子のみをフィルターしたり、複雑な条件でフィルタリングしたい場合はWhere-Objectを挟んであげることも出来ます。

コメント