パスワード付きZIP作成・解凍を効率化するバッチファイル活用

IT

「パスワード付きZIPファイルの作成・解凍を、よりスムーズに行いたい。」「毎回パスワードを入力するのは煩わしい。」そうお考えの方へ、7-Zipとバッチファイルを組み合わせた効率的な運用方法をご紹介します。

この記事では、Windowsのバッチファイルとオープンソースツールの「7-zip」を使用して、パスワード付きzipファイルの作成(圧縮暗号)と解凍(復号)を右クリックだけで行う方法を解説します。この記事のバッチファイルを使えば、効率的なパスワード付きzipの運用が可能となります。

この記事の内容
  • 圧縮ソフト7zipについて説明しています。
  • 7-zipを使ったバッチファイルで簡単にパスワード付zipファイルを作成する方法を説明します。

パスワード付きzipの概要

パスワード付きzipファイルとは

パスワード付きzipファイルとは、ファイルやフォルダを圧縮すると共にパスワードで暗号化したものです。暗号化で使われるメジャーな暗号化アルゴリズムはZipCryptoです。この暗号化したzipファイルを開く(復号する)ためには、暗号化時のパスワードが必要になります。パスワード付きzipは暗号化により大切なファイルや個人情報を守ることができます。

Windowsの標準機能だけでも圧縮したzipファイルを作ることはできますが、パスワード付きのzipファイルを作ることはできません。そこで便利なのが、7-zipという無料のソフトです。この記事では、7-zipを使って簡単にパスワード付きzipファイルを作ったり、解凍したりする方法を解説します。

Windowsでも、以前のWindowsXPまではパスワード付のzipファイルを作成できましたが、現在のWindowsバージョンでは、その機能が削除されています。
なお、現在のWindowsバージョンでも、ZipCryptoで暗号化されたパスワード付きzipファイルなら、標準機能だけで復号が可能です。

7-zipの利用

7-zipは、オープンソースの無料で使えるファイルの圧縮・解凍ソフトです。高い圧縮率と高速な動作が特徴で、多くの人に愛用されています。Windows標準機能では、パスワード付きzipファイルを作成できない為、今回は7zipを利用します。

7-zipのインストール方法

  1. 7zipの公式サイトにアクセスします。
  2. ダウンロードページで自分のWindowsが32ビットか64ビットかを確認して、それに合ったファイルをダウンロードします。
  3. ダウンロードしたファイルをダブルクリックして開き、表示される指示に従ってインストールを完了します。

これで、7-zipが使えるようになります。

Windowsのバッチファイルを使ったパスワード付きzipの作り方・解凍方法

7-zipはGUIによりファイルの暗号化・復号が可能です。しかし暗号化・復号をする機会が多い場合は操作が煩わしくなります。そこで次のようなバッチファイルを作成し、ファイルを右クリックしてバッチファイルのショートカットに送るだけで、暗号化・復号ができるようにしましょう。

まず準備するバッチファイルの内容は次の通りです。

@echo off
rem バッチファイルのショートカットを作成し、windows10の場合はC:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\SendTo\ にショートカットを保管する。
rem 「SendTo」フォルダを開く方法は、エクスプローラーなどで「shell:sendto」と打つ。

rem SetLocal EnableDelayedExpansion

rem 引数で渡された値からダブルクォーテーションを取り除いて受け取るので、には、「%1」の代わりに「~」(チルダ)をつけて「%~1」とする。
if     "%~1"=="" echo ファイル・フォルダを指定して下さい。         && goto end
if not "%~2"=="" echo ファイル・フォルダは複数指定しないで下さい。 && goto end

rem パスワードは推測しにくい文字列を使う事
Set PWD=1111

Set FileNameTmp=%~n1
rem 復号先ファイルが既に存在する確認する為の変数準備。"%~dpn1"の最後には本バッチで圧縮した事を示す「K」が付いているので「K」は削って存在確認をする必要がある。
Set FilePathTmp=%~dpn1%
Set FilePathTmp2=%FilePathTmp:~0,-1%

rem 拡張子が.zipなら復号
if "%~x1"==".zip" (
    rem 復元先ファイルが存在したら処理スキップ
    if exist "%FilePathTmp2%"   echo 復号ファイルが既に存在します && goto end
    rem カッコ付ファイル名の場合にエラーにならない様、ダブルクォーテーションでくくる。
    if "%FileNameTmp:~-1%"=="K" (
        rem  -ao (Overwrite mode) switch aou=名前変換して復号。パイプでパスワードを渡すので-pは不要。
        echo %PWD%| "C:\Program Files\7-Zip\7z.exe" x  -o"%~dp1" "%~1" -aou
    ) else (
      echo 本バッチで暗号化したファイルではありません && goto end
    )
rem 拡張子が.zip以外なら暗号化。
) else (
    rem 暗号化ファイルが存在する場合は処理スキップ。
    if exist "%~dpnx1K.zip" echo 暗号ファイルが既に存在します && goto end
    rem どのファイルを暗号化したかログ保管
    echo %date%_%time% %1 >> %~n0.log
    rem  -sdelで元の平文の削除
    echo %PWD%| "C:\Program Files\7-Zip\7z.exe" a "%~dpnx1K.zip" "%~1" -p -sdel 

)

:end

echo 何かキー入力して終了して下さい。
pause > NUL

なお、バッチファイル実行時に起動するコマンドプロンプト(黒い背景のコマンド画面)は、デフォルトの日本語文字コードがSJISになっています。よってバッチファイル内容をメモ帳等のエディタに張り付けて保存する際は、文字コードをSJIS(メモ帳の場合は画面下部で指定するエンコード「ANSI」がSJISの意味です。)にして保存してください。

メモ等の保存時イメージ。エンコードをANSI(SJISの意)にする。

バッチファイルの詳しい説明

  • @echo off:処理の表示を消し、画面をきれいにします。
  • 拡張子が.zipなら解凍、それ以外なら暗号化(パスワード付き圧縮)します。
  • 暗号化時のファイル名末尾には「K」を付けます。本バッチにより作成したzipである事の目印ですので、不要な方はバッチプログラムを修正して、目印を付けないように変更してください。
  • 暗号化ファイルが存在しているか確認し、既存なら処理を中止します。
  • 暗号化・復号(圧縮・解凍)には、7-zipを使用し、パスワードをあらかじめ決めておきます。パスワードをバッチファイルに記載する方法を取っていますので、バッチファイルのアクセス権には気を付けましょう。(他の方が参照できないようにしましょう。)またセキュリティーを強化する為に、パスワードはパイプで7zに渡す方法を採用しています。他の人間が同じサーバー(もしくはPC)を同時利用する可能性があるなら、安易に「7z.exe -p%PWD%」などと引数渡しをしてはいけません。(下に理由を記載)

バッチファイルをSendToに登録して簡単に使えるようにする方法

バッチファイルを作成したら、次の手順でSendToフォルダにショートカットを登録します。

  1. 作ったバッチファイルを右クリックし、「ショートカットの作成」を選択します。
  2. エクスプローラーなどで「shell:sendto」と打ち、作られたショートカットを保管します。なお、Windows11の場合は以下の場所が「shell:sendto」で開くSendToフォルダです。
C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\SendTo\

これで、ファイルやフォルダを右クリックし「送る」を選択すると、このバッチファイルを使ってパスワード付きzipを簡単に作成・解凍できます。

パスワード等の重要情報をコマンド引数に渡す場合の注意点

バッチファイルの中にパスワードを保存する行為には、2つの注意点があります。

  1. バッチファイルを他人に参照されないよう、アクセス権を制限しましょう。しかしどのように設定しても管理者には見られる覚悟でいましょう。
  2. 他人に実行中プロセスを照会されるリスクがありますので、パスワードの使い方に注意しましょう。(上記バッチファイルの方法なら問題無し)

特に2番の注意点は、バッチファイル作成者の盲点になりやすいので、ここで解説します。
先に申し上げますと、今回紹介したバッチファイルは、パスワードをパイプで7z.exeに渡す方法を採用しているので問題にはなりません。
しかしバッチ内容が簡潔に書けるからという理由で、「7z.exe -p%PWD%」などと7z.exeの引数にパスワードを渡してしまうと問題になります。このようなバッチの記述をして、ファイルの暗号化中または復号中に実行中プロセスを表示するWMICコマンドを次のように実行してみてください。
※大きいサイズの圧縮(または解凍)対象ファイルを用意して実験してください。小さいとすぐ圧縮・解凍が終わってしまい、実行中プロセスが表示されませんのでご注意ください。

>WMIC PROCESS WHERE "Name LIKE '%7%'" GET /FORMAT:LIST

Caption=7z.exe
CommandLine="C:\Program Files\7-Zip\7z.exe"  a "C:\tmp\test.txtK.zip" "C:\tmp\test.txt" -p1111 -sdel

7-zipに渡したパスワードが完全に見えてしまいますね。
またGUI画面でタスクを確認できる「タスク マネージャー」でも、プロセスの表示項目に「コマンドライン」を追加すると、先と同様にコマンドの引数を確認できてしまいます。

これらプロセス確認ツールでパスワードが見えるとしても、個人使用のPCなら問題になる事は少ないかもしれません。
しかしサーバー上で巨大ファイルを圧縮する運用があったとすると、(圧縮処理の為に)サーバが遅い事を気にした他の人が、サーバーの実行中のプロセスを確認する参照して、意図せず他人にパスワードが漏洩するかもしれません。
よって、パスワード等の重要情報をコマンドに渡したい場合は、上記バッチファイルのようにパイプを使うか、管理者しかアクセスしない環境でのみバッチファイルを使う等、注意が必要です。

プロセス確認ツールで引数がで参照できる件は、Windowsだけの問題ではなく、LinuxやUnixのPSコマンド(プロセスコマンド)でも同様です。
プロセスコマンドで、管理者だけでなく一般権限の方にもパスワードが見えてしまうので、OSを問わず常に注意して下さい。

記事のまとめ

Windowsで手軽にパスワード付きzipファイルを扱うには、7-zipと専用のバッチファイルを活用すると非常に便利です。バッチファイルをSendToフォルダに置いておけば、毎回コマンド入力する必要なく、直感的な操作で安全なファイル管理が可能になります。初心者でも簡単に準備できるので、ぜひこの方法をご活用ください。

タイトルとURLをコピーしました