本記事では、7-Zip を利用して複数のフォルダを個別に ZIP 化するバッチスクリプトを作成する方法を解説する。本スクリプトは、エクスプローラーで複数のフォルダをドラッグ&ドロップするだけで、それぞれのフォルダを ZIP ファイルとして圧縮する。大量のフォルダを一括で ZIP 化する作業を効率化できる。
スクリプトのコード
以下のバッチスクリプトを zip_folders.bat などの名前で保存し、デスクトップなどに配置することで、エクスプローラーからフォルダをドラッグ&ドロップするだけで ZIP 化できる。
@echo off
chcp 65001 > nul
setlocal enabledelayedexpansion
set "sevenZip=C:\Program Files\7-Zip\7z.exe"
rem ドラッグ&ドロップされたすべてのフォルダを処理
for %%F in (%*) do (
rem フォルダが存在するか確認
if exist "%%~F" (
set "folderPath=%%~dpF"
set "folderName=%%~nxF"
rem 各フォルダを個別に ZIP 化
"%sevenZip%" a -tzip "!folderPath!!folderName!.zip" "%%~F\*"
)
)
echo すべての ZIP 化が完了しました。
pause
スクリプトの詳細解説
1. @echo off
バッチスクリプトの実行時にコマンドの入力行を非表示にする。これにより、実行中のコマンドがコンソールに表示されず、出力がすっきりする。
2. chcp 65001 > nul
バッチスクリプトの文字コードを UTF-8(コードページ 65001) に変更する。これにより、日本語のファイル名やメッセージが文字化けしにくくなる。> nul を付けることで、コードページ変更のメッセージを非表示にしている。
3. setlocal enabledelayedexpansion
遅延環境変数展開を有効にする。
バッチスクリプトでは、通常の set コマンドによる変数の値は即時展開されるため、for ループの中で set した変数を !変数名! の形式で使うと、リアルタイムで値が展開されるようになる。
これにより、for ループ内で set した folderPath や folderName を適切に扱えるようになる。
4. set "sevenZip=C:\Program Files\7-Zip\7z.exe"
7-Zip の実行ファイルのパスを変数 sevenZip に格納する。
7-Zip をデフォルトの場所にインストールしていない場合は、ここを適切なパスに変更する必要がある。
5. for %%F in (%*) do (...)
バッチファイルにドラッグ&ドロップされたすべてのフォルダを for ループで処理する。%* はバッチスクリプトに渡されたすべての引数を表し、%%F にフォルダのパスが順番に渡される。
6. if exist "%%~F"
フォルダが実際に存在するかを確認する。存在しない場合はスキップする。
7. set "folderPath=%%~dpF"
%%~dpF を利用して、ドラッグ&ドロップされたフォルダの親ディレクトリのパスを取得する。
8. set "folderName=%%~nxF"
%%~nxF を利用して、フォルダの名前のみを取得する。
9. "%sevenZip%" a -tzip "!folderPath!!folderName!.zip" "%%~F\*"
7-Zip の a(追加)コマンドを使用して ZIP ファイルを作成する。
-tzip: ZIP 形式で圧縮(-t7zに変更すれば.7z形式で圧縮可能)!folderPath!!folderName!.zip: 出力する ZIP ファイルのフルパス(フォルダと同じディレクトリに作成)"%%~F\*": ZIP に含めるファイル(フォルダ内のすべてのファイル)
10. echo すべての ZIP 化が完了しました。
処理完了後にメッセージを表示する。
11. pause
pause を実行することで、スクリプト終了時に「続行するには何かキーを押してください...」と表示され、ユーザーがキーを押すまでコンソールが閉じない。
使用方法
- 上記のスクリプトを
zip_folders.batという名前で保存 - 圧縮したいフォルダを複数選択し、バッチファイルにドラッグ&ドロップ
- 各フォルダごとに ZIP ファイルが作成される
動作例
📂 入力(バッチファイルにドラッグ&ドロップするフォルダ)
D:\Projects\FolderA\
D:\Projects\FolderB\
D:\Projects\FolderC\
🔽 出力(ZIP ファイル)
D:\Projects\FolderA.zip
D:\Projects\FolderB.zip
D:\Projects\FolderC.zip
カスタマイズ
ZIP ファイルの保存先を変更
現在のスクリプトでは ZIP ファイルを元のフォルダと同じ場所に作成するが、特定のフォルダに保存したい場合は、以下のように変更する。
set "outputPath=D:\Compressed"
"%sevenZip%" a -tzip "!outputPath!\!folderName!.zip" "%%~F\*"
これにより、すべての ZIP ファイルが D:\Compressed フォルダに保存される。
7z 形式で圧縮
ZIP 形式ではなく 7z 形式 で圧縮したい場合は、以下のように変更する。
"%sevenZip%" a -t7z "!folderPath!!folderName!.7z" "%%~F\*"
注意点
- 7-Zip のインストールが必要
C:\Program Files\7-Zip\7z.exeに7z.exeがあることを確認する。- 違う場所にインストールされている場合は、
set "sevenZip=..."を修正する。
- フォルダ名に
!()などの特殊文字があると問題が発生する可能性setlocal enabledelayedexpansionの影響で!を含むフォルダ名は正しく処理されない可能性がある。- 必要ならフォルダ名の特殊文字を削除する処理を追加する。
まとめ
このバッチスクリプトを使用すると、エクスプローラーで複数のフォルダをドラッグ&ドロップするだけで、それぞれのフォルダを個別に ZIP 化できる。7-Zip のコマンドラインを活用することで、大量のフォルダを効率的に圧縮可能となる。