gologiusの巣

プログラミングなどの技術メモです。誰かの役に立てるとうれしいです。

【バッチ】powershell で複数ファイルをPW付圧縮するバッチを作る話

業務で自動化したかったので作った(業務自体を潰したほうがいいのでは

何がやりたいの?

もらったファイルをリネームして、PW付ZIP圧縮する。

作ったバッチ

※7ZIPのインストールなどをして、7z.exeを叩ける状態にする必要がある

圧縮・解凍ソフト 7-Zip

gist.github.com

使い方

別途下記のようなbatを用意して、D&Dで実行させる。

cd %~dp0
powershell -NoProfile -ExecutionPolicy Unrestricted .\process.ps1 %1 %2 %3 %4 %5 %6 %7 %8 %9
pause

こんな感じ↓ f:id:gologius:20201108162247g:plain

補足感想など

ファイル名の置換

バッチ(DOS)でやろうとしたが、ごり押しバッチしか出てこなかった。 replace() 的な関数使ってスマートにやりたいよね、ということでpowershellを採用した。

PW付圧縮ファイルについて

社内で使えるソフトのほうがいいよねという個人的理由で7zipを採用。

公式に

C:\Program Files\7-Zip\7z.exe" a -pPassWord data.zip data.xlsx

と書いているせいで -pPassWord がオプション指定用と勘違いした。よく考えたらすぐ分かるのだが。 (-p → オプション指定文字列 | PassWord → 任意のパスワード文字列)

コマンドでZIPや7zにパスワードを付ける | 7-Zip

7zipの実行

直接下記のように指定したら、$password が変数展開してくれず、 「$password 」という文字列がパスワードとして設定されてしまった。

&$sevenzip_path a .\$result_file_name .\$work_dir_name  -p$password 

スペースを挟まないと変数展開してくれない模様。とりあえず別変数を用意して対応した。

感想

powershell気持ち悪いし永遠に慣れる気がしない