コマンドだけでZipファイル化は難しかった
きっかけはZipファイルにパスワードを付けようと思った時に、バッチファイル、PowerShell、C#ぐらいで何とかできないかな~と思ったことから始まります。
結果から先に伝えますと、出来ませんでした(笑)
もちろん私には作成出来なかったという力不足なだけなので、作れる人は簡単に作れてしまうかもしれません。
また超個人的な理由で時間もなかったので、結局「7-zip」の力を借りつつ、バッチファイルからパスワードを付けるという方法に落ち着きました。
7-Zip
7-Zipはフォルダやファイルを圧縮・解凍するソフトです。めちゃめちゃ有名なアプリなのですが、こちらはコマンドラインからも利用できるところが嬉しいです。
パスワード暗号化はもちろん、圧縮レベルも選択できます。また圧縮レベルは「0、1、3、5、7、9」から選べて「0」が無圧縮で「9」が「超圧縮」になります。
※7-zipは上記公式ページのダウンロード先からダウンロード及びインストールを行ってください。
バッチファイル作成
バッチファイルは簡単な方法に落ち着きまして、バッチファイルから「7-zip」を読み込み、コマンドラインでパスワード付きZipファイルを作成するという単純なものです。
では見ていきましょう。
@echo off
setlocal enabledelayedexpansion
REM 圧縮元のディレクトリ
set SOURCE_DIR=C:\Path\To\Your\Source
REM 現在の日付と時刻を取得(mm:dd hh:mm:ss 形式)
for /f "delims=" %%a in ('wmic OS Get localdatetime ^| find "."') do set datetime=%%a
set formatted_datetime=!datetime:~4,2!-!datetime:~6,2!_!datetime:~8,2!-!datetime:~10,2!-!datetime:~12,2!
REM 圧縮先のファイル名(元のファイル名 + 現在の日付と時刻)
set ZIP_FILE=C:\Path\To\Your\Source\Archive_!formatted_datetime!.zip
REM 7-Zipのパス(7z.exeがある場所)
set ZIP_EXE=C:\Program Files\7-Zip\7z.exe
REM パスワード(必要に応じて変更)
set PASSWORD=YourPassword
REM 超圧縮と暗号化でZIP形式で圧縮
"%ZIP_EXE%" a -tzip -mx9 -p%PASSWORD% "!ZIP_FILE!" "!SOURCE_DIR!\*"
上記のコマンドはコピーしてそのまま使えますが、「圧縮元のディレクトリ」と「圧縮先のファイル名」はご自身の環境に合わせてください。
-以下コマンド説明-
zipファイルは同じファイル名だと上書きしてしまうことや、最新のファイルが分からなくならないように、日付と時刻を組み合わせるようにしました。
REM 現在の日付と時刻を取得(mm:dd hh:mm:ss 形式)
for /f "delims=" %%a in ('wmic OS Get localdatetime ^| find "."') do set datetime=%%a
set formatted_datetime=!datetime:~4,2!-!datetime:~6,2!_!datetime:~8,2!-!datetime:~10,2!-!datetime:~12,2
パスワードもご自身でパスワードを設定してください。こちらでは「YourPassword」にしています。
REM パスワード(必要に応じて変更)
set PASSWORD=YourPassword
以下のコマンドで「-tzip」がzipファイルで、「-mx9」が圧縮レベルになります。
REM 超圧縮と暗号化でZIP形式で圧縮
"%ZIP_EXE%" a -tzip -mx9 -p%PASSWORD% "!ZIP_FILE!" "!SOURCE_DIR!\*"
圧縮レベルをマックスの「-mx9」としていますが、なんと「-mx10」でも動作しました。私の環境では「-mx10」の方が高圧縮でしたが、「-mx10」で使っている方がいなかったので「-mx9」のままでいいかもしれません。
今回は特定のフォルダを対象にした方法で作成しましたので、コマンドも短く収まり、ごちゃごちゃ感はなくなったので、まあまあでしょう。
ぜひ上記コマンドをベースにアレンジしてください。