バッチファイルでパスワード付きZip作成

バッチファイルでパスワード付きZip作成

目次

はじめに
成果物イメージ
パスワード生成まで
パスワード付き圧縮処理
まとめ

はじめに

今回の記事で紹介させていただくのは、パスワード付きZipファイルバッチファイル起動で作成するツールです。バッチファイルを作成しなくても、Lhaplusや7-Zipでパスワード付き圧縮すればできるじゃないか!というご意見が飛び交いそうですが、Zipのパスワードを考えたり、パスワード生成ツールやサイトを利用したりというのは、面倒くさいと感じるときはないでしょうか(メールで添付ファイルを自動暗号化する場合は、考えない想定です)。そんなちょっとした手間を省きたいという個人的な願望から今回の記事を書いてみようと思いました。

成果物イメージ

パスワード生成まで

では実際にバッチファイルを作成していきます。

まずファイルを配置する対象フォルダー、Zipが生成されるフォルダーの設定を行います。
こちらは変数にパス情報を入れて、後程記載する圧縮処理の部分でこの変数を使います。

@echo off

rem
rem ファイル圧縮(パス付)プログラム
rem

rem 出力先フォルダ
set OUTPUT=C:\test\etc\Output\
rem 対象フォルダ内のファイル
set TARGETFILES=C:\test\etc\UploadZip\*.*

次に、パスワードの生成部分を記載していきます。
パスワード設定の文字数と生成パターン(コメント記載のパターンを用意)はプログラム側で決め打ちにしております。
ただこちらはユーザー入力させる方式にも変更できるので、必要に応じて変更していただければと思います。
(set /p 変数名というコードにすれば、コマンドプロンプト上で入力を求められる形になります。)

rem パスワード設定文字数
set length=10
rem 生成パターン 1:数字のみ、2:英数
set pattern=2

パスワード生成する部分に関しては、powershellのコマンドを呼び出し、生成する動きを作成しております。
firコマンドのオプションで/f “userbackq”を設定することで、powershellのコマンド結果を変数に代入するような流れになっております。
また生成パターンに関しても、今回はパターンを2つしか用意しておりませんが、英数+記号などのパターンでパスワードを作成したい場合などは、コードの”switch”文に条件追加すれば、パターンを追加できます。

for /f "usebackq" %%i in (`powershell -NoProfile -ExecutionPolicy Unrestricted -Command "& { switch ("%pattern%") {"1" {$characters='123456789'}"2" {$characters='abcdefghkmnprstuvwxyzABCDEFGHKLMNPRSTUVWXYZ123456789'}}; -join ${characters}[(1..%length% | ForEach-Object { Get-Random -Maximum ${characters}.length })] }"`) do set value=%%i
pause

上記4行目、5行目の間に下記のコマンドを追加して、パスワードが生成できているか確認してみました。

rem 追加コード
echo %value%
出力結果
EadLytRrhp

パスワード付き圧縮処理

最後に圧縮処理の紹介です。今回は自前で圧縮処理を書くわけではなく、7-Zipの機能を使って動作させています。このソースを使って動作させる場合は、7-Zipのダウンロード・インストールをお願いいたします。

rem 日付設定
set Date_Tmp=%date:/=%
rem 圧縮処理とパスワード保護
7z a -tzip %OUTPUT%%Date_Tmp%.zip %TARGETFILES% -p%value%

echo %value%
pause

個人的にZipファイルには作成日付をつけたいので、日付設定の変数を使っておりますが、こちらも必要に応じて使ってください。
圧縮処理に関しては、7zコマンドで処理を書きます。
環境変数に7-Zipを追加しておけば、カレントディレクトリの設定などコマンドで設定する必要がないので、
設定することをおすすめします。

7z a 圧縮結果.zip 圧縮対象 -pパスワード

圧縮処理のコードは上記の通りです。
TARGETFILES変数で、ファイル名と拡張子にワイルドカード(*)を使っているので、フォルダーにあるファイル全てが対象となります。

最後にパスワードの値が入った変数「value」をechoで表示することで、設定したパスワードを見られるようにしておきます。以上でコード・機能紹介は終わりです。

まとめ

今回作成したツールはまだまだ見直す点は多いかと作成した後で思いました。例えば、ドラッグ&ドロップでバッチファイルにファイルを移動させたら、パス付Zipファイルとパスワードが書かれたテキストが作成されたり、右クリックで呼び出したりなどもっと便利にできると思いますので、興味を持たれた方はカスタマイズしてみてはいかがでしょうか。