バッチファイルで毎日フォルダを日付別に世代管理してバックアップを取る方法

バッチファイル

プログラムや資料など、成果物の履歴をバックアップとして別フォルダに残しておきたいことがあると思います。この記事では、バッチファイルを使用し、フォルダを丸ごと別の場所にバックアップする方法を紹介します。

  • 対象フォルダを丸ごと別フォルダにバックアップ
  • バックアップした日付がわかるようフォルダ名を日付とする

サンプルコード

以下は、C:\SourceFolder を、C:\BackupFolder\(日付) ディレクトリにバックアップするバッチファイルです。

@echo off
setlocal

rem バックアップ元とバックアップ先のパスを設定(1)
set "Source=C:\SourceDirectory"
set "BackupRoot=C:\BackupDirectory"

rem 現在の日付をYYYY-MM-DD形式で取得(2)
set date2=%DATE%
set year=%date2:~0,4%
set month=%date2:~5,2%
set day=%date2:~8,2%
set Today=%year%-%month%-%day%

rem バックアップ先の日付別フォルダを作成(3)
set "BackupDir=%BackupRoot%\%Today%"
if not exist "%BackupDir%" mkdir "%BackupDir%"

rem ファイルをバックアップ先にコピー(4)
xcopy "%Source%\*" "%BackupDir%\" /E /H /C /I /Y

echo バックアップが完了しました: %BackupDir%
endlocal

解説

  1. バックアップ元とバックアップ先の設定:スクリプトの初めに、バックアップを取りたいフォルダ(Source)とバックアップデータを保存するルートフォルダ(BackupRoot)のパスを設定します。
  2. 日付の取得とフォーマット:現在の日付を取得し、YYYY-MM-DD形式に整形します。値の一貫性確保のため、日付を変数date2に保持して、その後に分割しています。
  3. バックアップ先フォルダの作成:日付をフォルダ名に含めたバックアップ先のパスを構築し、存在しない場合はそのフォルダを新規に作成します。
  4. ファイルのコピー:xcopyコマンドを使用して、バックアップ元フォルダの内容を日付別フォルダにコピーしますオプションの内容は以下の通りです。

/E はサブフォルダを含めすべてをコピー
/H は隠しファイルやシステムファイルもコピー
/C はエラーが発生してもコピーを続行
/I は宛先がディレクトリであると仮定して処理を行う
/Y は上書き確認をしない(同じ日にもう一度バッチを実行した場合の対策)

もうひと工夫で全自動化

タスクスケジューラを使うと、バッチファイルの実行も自動化できます。

まとめ

本記事では、バッチファイルで毎日フォルダを日付別にバックアップを取る方法を紹介しました。このバッチファイルとタスクスケジューラを組み合わせれば、バックアップの全自動化ができます。ぜひご活用ください。

タイトルとURLをコピーしました