コマンドだけで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」のままでいいかもしれません。

今回は特定のフォルダを対象にした方法で作成しましたので、コマンドも短く収まり、ごちゃごちゃ感はなくなったので、まあまあでしょう。

ぜひ上記コマンドをベースにアレンジしてください。

この記事が気に入ったらサポートをしてみませんか?