端くれプログラマの備忘録 バッチファイル [バッチファイル] サブディレクトリを巡回しながらアーカイブを作成するには

[バッチファイル] サブディレクトリを巡回しながらアーカイブを作成するには

バッチファイルを使って以下の処理を行う方法を考える。

カレントディレクトリに沢山のサブディレクトリが存在し、それぞれのサブディレクトリに画像ファイルが多数格納されているとする。バッチファイルを使って、サブディレクトリごとに中身のファイルをアーカイブして、カレントディレクトリにZIPファイルとして保存してみよう。

for /d %f in (*) do call makezip.bat %f

このバッチファイルでは、サブディレクトリを巡回し、サブディレクトリ名を引数にしてmakezip.batを呼び出している。

@echo on
set dir=%1
cd %dir%
C:\Temp\7za.exe a ..\%dir%.zip *.jpg
cd ..

このバッチファイルでは、7-Zipのコマンドライン版(7za.exe)を使ってサブディレクトリ内の全jpgファイルをアーカイブし、カレントディレクトリにサブディレクトリ名のZIPファイルとして保存している。バッチファイル内でディレクトリを移動しているのは、カレントディレクトリからアーカイブを行わないとアーカイブ内にサブディレクトリ名が相対パスとして保存されてしまうため。すなわち解凍すると、まずサブディレクトリが作成されて、その中にファイルが展開されることになる。それを避けるため。

簡単なバッチファイルだけど、テンプレートとして用意しておくと使い回しができそう。