Windows で仕事をしていて大量のフォルダを一括でパスワード付きzipに圧縮して顧客に納品したいとする。
<やりたいこと>
例)20180101というフォルダを、20180101.zipに圧縮(パスワード:himitu)
圧縮されたのを開こうとすると
パスワードを求められる。
てな感じにしたい。
フォルダ1つ(20180101)だけを圧縮するなら右クリックからやればいいが、
20180102
20180103
20180104 …
と続く全てのフォルダをそれぞれzip圧縮したいときは、手作業だと面倒すぎる。
※「全てを1つの入れ物(例えば「2018年」というフォルダ)にまとめて、それを圧縮すればいい」という考えもありそうだが、それだとファイルサイズが大きすぎてメール添付ができなくなってしまう。あくまでフォルダ1つ1つを圧縮かけたい。それを、コマンド一発でやりたい。
<やりかた>
まずはコマンドでフォルダ(1つ)をzip圧縮できるようにする。7z(セブンジップ)というフリーソフトを使う。高性能なのに無償提供。作者の天才ぶりがうかがえる。
今回はWindows7 32bitなので、32bit版をダウンロードする。落としたら実行するだけでインストーラが走る。
インストール先を控えておく。このあとPATHを通すので。通常は
インストール完了。
PATHを通す。これもコマンドでやってしまう。まずは管理者権限でコマンドプロンプトを起動する。
スタートメニュー → cmdと入力 → 右クリックで「管理者として実行」。
setx コマンドで追加するが、1文字でもミスるとWindowsが死ぬ(PATHが壊れる)ので、いったんnotepadにでも打って何度も確認してからコピペでやるほうがよい。
「成功:指定された値は保存されました」と出たらうまくいっている。
コマンドプロンプトのウィンドウを閉じてから再度cmdを起動すれば、PATHが通って7zコマンドが使えるようになる。
パスワードなしの単なるzip圧縮なら
7z a zip名 対象フォルダ名
で圧縮できる。
パスワード付きのzipに圧縮するなら
echo パスワード| 7z a zip名 対象フォルダ名 -p
とする。
パスワードとパイプ文字|の間にスペースをあけないのがコツ。
実際にやってみる。
echo himitu| 7z a 20180101.zip 20180101 -p
うまくいった。これでフォルダ1つだけ(20180101)を、zipに圧縮(20180101.zip)にできた。
開こうとするとパスワードが出て…
himitu と入力すると解除できる。7zほんと最高だ。
あとはこれをforループで回せば一括で全てのフォルダを圧縮できる。
for /F %i in ('dir /b') do @echo %i && @echo himitu| 7z a %i.zip %i -p
完璧。
エクスプローラで見てもしっかり圧縮されている。
ファイルとフォルダが混在している環境ならif文をつけて「フォルダかどうか」を判定してやるとフォルダだけ決め打ちで圧縮できる。
for /F %i in ('dir /b') do @echo %i && if %~ai == d-------- ( @echo himitu| 7z a %i.zip %i -p ) else ( echo フォルダではありません )