フォルダごとにZIPをつくるバッチ!! (7-zip)

提出データを用意している時に、フォルダごとにZIPを作りたいなーっということが多々あります。

コレくらいできるだろっと色々探してみたものの、以外とないもんですね、、、あまりこういうこと考える人いないのかな、、、(;´∀`)

っということで、今回はバッチでツールを作成して、フォルダをD&DしたらフォルダごとにZIPにするようにしてみたいと思います(`・ω・´)ゞ

バッチだけではZIP圧縮することができないので、コマンドラインから色々できる「7-zip」を使いたいと思います!

エコー機能のOFF

まずは、batに書いたコマンドが表示されないようにしたいと思います!

@echo off

7-zipのパスを定義

次に「7-zip」のパスを定義します。インストールディレクトリにあわせて変更してください(`・ω・´)ゞ

コマンドラインから使用できる「7-zip」は「7z.exe」になります。

@echo off
set ZIP_PATH="C:\Program Files\7-Zip\7z.exe"

繰り返し処理

ココからは、D&Dされたフォルダを一個ずつ処理していきます!まずは、繰り返し処理の骨格だけ記述します。

@echo off
set ZIP_PATH="C:\Program Files\7-Zip\7z.exe"
for %%f in (%*) do (
)

繰り返し処理でやりたいことは、「do()」の中に記述していきます。「7-zip」を使って、ZIPを作って行きましょう!

7-zipのコマンドラインの書式は以下の通りです。

7z <command> [<switch>…] <base_archive_name> [<arguments>…]

まず今回はZIPを作成したいので、コマンド「a」を指定します。他にもZIPからファイルを削除する「d」、ZIPにあるファイルを解凍する「e」などがあります。

次にどんな書庫を作成するかスイッチ「-t{Type}」の指定をします。今回はzipなので「-tzip」となります!

その他のオプションについては、「Command Line Syntax」をご覧ください

あとは、一個ずつ取り出した変数「%%f」を使って、Input、Outputを指定してコマンドを組み立てます。

@echo off
set ZIP_PATH="C:\Program Files\7-Zip\7z.exe"
for %%f in (%*) do (
  %ZIP_PATH% a -tzip %%f.zip %%f
)

ウインドウが消滅しないように

最後に、処理がおわったらウインドウが急に消滅しないように「pause」を追加します。これで何かキーを押すまでウインドウが表示されたままになります。

@echo off
set ZIP_PATH="C:\Program Files\7-Zip\7z.exe"
for %%f in (%*) do (
  %ZIP_PATH% a -tzip %%f.zip %%f
)

pause

早速実行してみると、このようにフォルダごとにZIP圧縮されてました!(*´ω`*)b