【PowerShell】自動で同名・異拡張子ファイルをまとめてzipにする方法

PowerShell

どうもcoto.です。
今回はたくさんあるファイルを複数個ずつ個別にzipにしていく方法です。

実行イメージ

なんと表現すれば良いかわからなかったのですが、
同名・異拡張子ファイルというのは
例えばabc-01.docxとabc-01.pdfのような組み合わせです。

この組み合わせがabc-01, abc-02…と連番でたくさんありまして、
それぞれをzipにまとめていきます。(下図参照)

「同名・異拡張子ファイルをzipにまとめる」のイメージ図

コード(というかコマンド?)

$import = "① 原本フォルダ"
$export = "② 保存フォルダ"
$image = "③ファイル名の固定部分"
$i = ④ 連番の始番号
 
while ($i -le ⑤ 連番の終番号) {
$j =$i.ToString("00") 
 
Compress-Archive -Path `
$import$image-$j.docx,`
$import$image-$j.pdf `
-DestinationPath `
$export$image-$j.zip -Force
$i +=1
 
}

解説

① 原本フォルダ:zip化したいファイルがある場所を絶対パスで指定します。
       (相対パスでも動くと思いますが確認していません。)
        C:\Users\aaa\ のように最後に「\」を付けてください。

② 保存フォルダ:作成したzipを保存する場所を絶対パスで指定します。
        (相対パスでも動くと思いますが確認していません。)
        原本フォルダと同じでも良いですが個人的には分けたほうが使いやすいです。

③ファイル名の固定部分:例でいえば「abc」の部分です。

④ 連番の始番号:連番が01~10なら1です。

⑤ 連番の終番号:連番が01~10なら10です。

拡張子を変える場合について

拡張子、つまりzipにするファイルの種類を変更する場合は10, 11行目を調整します。

$import$image-$j.docx,`
$import$image-$j.pdf `

この部分ですね。
上記コードでは docx とpdfがまとまってzipになりますので、
例えば「epsとpngをまとめたい」という場合なら

$import$image-$j.eps,`
$import$image-$j.png `

になります。
3種、4種などまとめるファイルを増やしたい場合も同じ要領で行を増やしてください。

ファイル名中連番の桁数について

デフォルトでは連番が2桁(01, 02, 10など)になっているファイルを想定しています。
他の桁数をご使用の場合は、7行目の正規表現を適宜調整してください。

例:3ケタ

$j =$i.ToString("000")

使い方

上記コマンド中の①~⑤部分と10, 11行目を環境に合わせて書き換え、
PowerShellにコピペしてEnter押すだけです。

zipとしてまとめたいファイルが拡張子以外同名かつ、連番である前提で組んでいます。

御託

仕事ではなく趣味のストックフォトのために組みました。

写真やイラストをPIXTAやAdobeStockなどの販売サイトに登録するとき、
同じ作品のベクター、PNG、JPGなど複数ver販売したい、と思ったら
1つのzipにしなければいけないんですよね。

今までぽちぽち手作業でやっていたんですが、いい加減バカバカしいなと。

こんなんやるくらいならその分写真撮りたい!絵描きたい!
なんて不満がたまりまして。

他にも学校や塾で学籍番号別でzipにしたい、など応用できると思います。

コメント