ファイルサーバなどで容量の節約にフォルダ単位で圧縮してアーカイブ化することがあると思います。
いざ、再び必要になったときに、ピンポイントなら良いのですが、大量に解凍するのはなかなか手間です。
そこでバッチを使って、同じディレクトリ内の圧縮ファイルを解凍する方法をご紹介します。
サンプルコード形式です。
7zipインストール済みが前提です。
想定のフォルダ構成
どのようなフォルダ構成での動作を想定しているかご説明します。
実行ディレクトリ下にずらっと圧縮ファイルがある環境です。unzip_all_compressed.bat
ファイルを作成し、サンプルコードを書き込み、ダブルクリックで処理を実行します。
次のようなフォルダ構成を想定しています。
実行ディレクトリ
│───unzip_all_compressed.bat
│───1.7z
│───2.7z
└───3.7z
こんな感じで実行ディレクトリの下にある圧縮ファイルをすべて解凍します。
それではサンプルコードを見ていきましょう!
同じディレクトリ内のすべての7zファイルを解凍
unzip_all_compressed_7z.bat
ファイルを作成し、サンプルコードを書き込み、ダブルクリックで処理を実行します。
@echo off
rem 7-Zipのパス
set "zip_executable=C:\Program Files\7-Zip\7z.exe"
rem 現在の作業ディレクトリを取得
set "source_folder=%cd%"
rem 検索する拡張子
set "extension=.7z"
rem 指定された拡張子のファイルを検索して絶対パスを取得
for /r "%source_folder%" %%F in (*%extension%) do (
rem 7-Zipを使ってファイルを解凍
"%zip_executable%" x "%%~fF" -o"%%~dpF" -y
)
pause
実行するとこのようにコマンドプロンプトが開いて、解凍処理が行われます。
実行後はこのようになります。
無事、解凍することができました。
同じディレクトリ内のすべての圧縮ファイルを解凍(複数の拡張子に対応)
先ほどは.7zファイルだけを対象にしていました。
主だった圧縮形式を対象に解凍してみたいと思います。
@echo off
rem 7-Zipのパス
set "zip_executable=C:\Program Files\7-Zip\7z.exe"
rem 現在の作業ディレクトリを取得
set "source_folder=%cd%"
rem 検索する拡張子
set "extensions=.7z .zip .rar .tar .gz .gzip .bz2 .bzip2 .xz .lzh"
rem 指定された拡張子のファイルを検索して絶対パスを取得
for %%E in (%extensions%) do (
for /r "%source_folder%" %%F in (*%%E) do (
echo %%~fF
"%zip_executable%" x "%%~fF" -o"%%~dpF" -y
)
)
pause
変わった部分はset "extensions=.7z .zip .rar .gzip .gz .bzip2 .bz2 .xz .tgz"
です。
ディレクトリ下の指定拡張子のファイルをすべてリストアップしているのですが、
その対象を拡げています。
例では三種で試してみました。
同様に実行するとこのようになります。
無事、複数の圧縮形式でもすべて解凍できました。
extensions変数分だけループさせています。
対象が変わったり増えたりした場合は、extensions変数の指定を変更してください。
同じディレクトリ内のすべてのパスワード付き圧縮ファイルを解凍
最後に、パスワード対応してみましょう。
まず、パスワード付きの圧縮ファイルに対して、先ほどのコードを実行してみます。
するとこんな感じになります。
ここでパスワードを入力すれば解凍できます。
しかし、一括解凍とはいかないので、対象ファイルがたくさんあると手間です。
パスワードが掛かっていてもまとめて解凍できるようにしたいと思います。
unzip_all_compressed_with_password.bat
ファイルを作成し、
次をコピペします。
パスワードは、例として、「test_password」としています。
@echo off
rem 7-Zipのパス
set "zip_executable=C:\Program Files\7-Zip\7z.exe"
rem パスワード
set "password=test_password"
rem 現在の作業ディレクトリを取得
set "source_folder=%cd%"
rem 検索する拡張子
set "extensions=.7z .zip .rar .gzip .gz .bzip2 .bz2 .xz .tgz"
rem 指定された拡張子のファイルを検索して絶対パスを取得
for %%E in (%extensions%) do (
for /r "%source_folder%" %%F in (*%%E) do (
"%zip_executable%" x "%%~fF" -p"%password%" -o"%%~dpF" -y
)
)
pause
実行するとこのようになります。
パスワード付きでも、先ほどのように入力を求められることなく解凍することができました。
実際に使用される際は、set "password=test_password"
部分を適宜修正してご使用ください。
これで、無事に7zipとバッチ(bat)で複数ファイルをまとめて一括解凍することができました。
バッチでまとめて実行できることで、時間と手間を節約できます。
また、半自動的に処理できることで、ヒューマンエラーも減ります。
仕事の効率化にも繋がりますので、是非試してみてはいかがでしょうか。
今回は以上となります。
本記事が少しでもお役に立てれば幸いです。
それでは、読んで頂きありがとうございました!