7-Zipを使ってフォルダバックアップバッチを作成する

フォルダをバックアップしてzipに圧縮するバッチを作成する

フォルダを定期的にバックアップする必要があったのでバックアップ用のバッチを作成しました
ディスク容量節約のためにバックアップするときはZipファイルに圧縮させました、圧縮には7-Zipを使用します

7-zip.opensource.jp

7-Zipでフォルダを圧縮するときの基本構文

"C:\Program Files\7-Zip\7z.exe" a "C:\バックアップ先フォルダ\backup.zip" "C:\バックアップ元フォルダ\"

「a」は圧縮に使用するコマンドです
ちなみにファイルの拡張子を7zにすると7zip形式で圧縮されるよ

必須のコマンドはこんな感じ

Command Description 説明
a Add 圧縮に使用する
e Extract 展開に使用する
l List リストの一覧表示
t Test テスト

他にもたくさんオプションがあるけど割愛

バックアップzip.bat

以下のバッチファイルはバッチを実行したフォルダに「_backup」フォルダを作成してzipファイルでバックアップを行います
ついでにログファイルも出力してます

作成されるファイルの階層イメージ

.\_backup\yyyymmdd-hhmmss_フォルダ名.zip

なお、そのままバックアップを実行すると実行するたびにフォルダ「_backup」の中も再帰的にバックアップされてしまうので、スイッチ「-zr」を使用してフォルダ「_backup」は圧縮対象から除外してます

使い方

バックアップしたいフォルダにバッチファイルを設置

実行するとバックアップフォルダが作成されてその中にバックアップzipファイルが出来ます

バックアップフォルダ「_backup」
ログファイルも作成される

バックアップzip.bat

(保存するときはSJISで保存してね)

@echo off
setlocal

::
::このバッチファイルは日本語で作成されているのでsjisで保存してね
::This batch file is created in Japanese, so please save it with sjis.
::

cd /d %~dp0

::日付の取得
set year=%date:~0,4%
set month=%date:~5,2%
set day=%date:~8,2%


::時刻の取得
set time2=%time: =0%

set hour=%time2:~0,2%
set minute=%time2:~3,2%
set second=%time2:~6,2%


::◆日時フォーマット整形して取得
set yyyymmdd-hhmmss=%year%%month%%day%-%hour%%minute%%second%

::◆バックアップ先のフォルダ名
set backupFolderName=_backup

::◆7zipのexeの場所
set sevenZipExePath="D:\Program Files\7-Zip\7z.exe"


::◆バックアップ対象のフォルダパス
set backupFromFolder=%~dp0

::◆バッチファイルのあるフォルダ名を取得する
for %%a in ("%CD%") do (set thisDirectory=%%~na) 


::◆バックアップ先のzipファイルのパス
set zipFilePath=%~dp0%backupFolderName%\%yyyymmdd-hhmmss%_%thisDirectory%.zip

::◆ログファイルのファイルパス
set logFilePath=%~dp0%backupFolderName%\backuplog.log


echo.
echo ----
echo 現在時刻: %yyyymmdd-hhmmss%
echo バックアップフォルダ名: %thisDirectory%
echo.
echo バックアップ対象のフォルダパス: %backupFromFolder%
echo バックアップ先のzipファイルパス: %zipFilePath%
echo バックアップ除外フォルダ : %backupFolderName%
echo ログファイルファイルパス : %logFilePath%
echo ----
echo.


::バックアップフォルダの作成
::フォルダを先に作成しておかないとログファイルが書き込めないので作成しておく
mkdir "%~dp0%backupFolderName%"


::ログファイルの初期化
::ログ開始時刻の書き込み
echo.
echo %date% %time% >"%logFilePath%"
echo.

::7-Zipコマンドラインメモ
:: a : Add 圧縮
:: -zr : フォルダを除外
:: -mx=5:圧縮率(0無圧縮 9最大圧縮)
:: -mmt=on :マルチスレッド化
:: -ssw:他のアプリが使用中のファイルも圧縮
:: -bb3 : ログの表示



::7-Zipでバックアップ実行
call %sevenZipExePath% a "%zipFilePath%" "%backupFromFolder%" -xr!"%backupFolderName%" -mmt=on -ssw -bb3 >>"%logFilePath%"


::ログファイル終了時刻の書き込み
echo.
echo %date% %time% >>"%logFilePath%"
echo.


コードはこっちにも記載
github.com