Backup

robocopy 日付フォルダ分けバックアップする方法

こんばんは。今回はrobocopyのバックアップ方法応用編です。

基本的なrobocopyの使い方は前記事のrobocopy使い方備忘録になります。

前回、robocopyコマンドでバックアップするバッチファイルを作成しました。しかし単純なロボコピーコマンドだけのバッチファイルだと2回目以降は「コピー先フォルダ」が上書きされてしまうので世代管理ができません。

今回は、日付ごとに 「コピー先フォルダ」を作成しロボコピーバックアップをする時の方法を備忘録としてまとめました。

robocopy バックアップ方法

robocopyバッチファイルを作成し、タスクスケジューラー登録すると自動でバックアップを日々行なってくれます。

しかし、バッチファイルで「コピー元フォルダ」を単純に「コピー先フォルダ」へコピーすると、毎回上書きしてしまい過去(2世代前)のバックアップが取れません。

通常の robocopy

同じフォルダへ上書き

上記の方法だと、2回目以降にバッチファイル実行をすると「コピー先フォルダ」を上書きしてしまいます。日々のバックアップを溜めたい場合には向きません。

そこで方法として考えたのが日付フォルダを作成しバックアップをする方法です。下記のようなイメージになります。

日付でrobocopy

日付ごとにフォルダ作成し保存

バッチファイル実行時は【コピー先フォルダ】に日付(YYYYMMDD)フォルダを作成し、その作成した日付(YYYYMMDD)フォルダへバックアップするので永続的にバックアップが可能です。

毎日、日付は変わるので上書きされる心配がなくなります。

バッチファイル date 文字の抽出

下記のように、バッチファイルやコマンドプロンプトで日付コマンド echo %date% とすると2019/10/08と/(スラッシュ)つきの西暦8桁が表示されます

C:\Users\Administrator>echo %date%
2019/10/01

フォルダ作成コマンドで mkdir %date%を打つと”コマンドの構文が間違っています。” と表示されます。何故このコマンドは間違っているのか?

それはWindowsフォルダの命名規則として/ (スラッシュ)は入力が出来ないようになっています。YYYY/MM/DDフォルダを作成の命令の為、 コマンドの構文が間違っています。と表示されます。

Windowsフォルダ名_禁止文字列

西暦8桁の日付 date / (スラッシュなし) コマンド

西暦8桁日付 /(スラッシュなし)の表示方法が下記になります。%date%の文字列から年月日をそれぞれ抽出しています。

C:\Users\Administrator>set YYYY=%date:~0,4%
C:\Users\Administrator>set MM=%date:~5,2%
C:\Users\Administrator>set DD=%date:~8,2%
C:\Users\Administrator>echo %YYYY%%MM%%DD%
20191008

コマンドプロンプトでecho %date%を打つと下記のように2018/10/08と表示されます。バッチファイルでの文字の数え方は先頭は0(ゼロ)からスタートになります。

set YYYY=%date:~0,4% は先頭0文字目から4文字を抽出し変数YYYYにセット

set MM=%date:~5,2% は先頭5文字目から2文字を抽出し変数MMにセット

set DD=%date:~8,2% は先頭8文字目から2文字を抽出し変数DDにセット

最終的にYYYY(年)、MM(月)、DD(日)を結合させてecho %YYYY%%MM%%DD%20191008の表示になります。

西暦8桁の日付 /(スラッシュ)なしで抽出するバッチファイルコード

@echo off
rem
echo %date%
rem
rem
rem 日付をYYYY/MM/DD形式からYYYYMMDD形式にする。
set YYYY=%date:~0,4%
set MM=%date:~5,2%
set DD=%date:~8,2%
rem
rem
echo %YYYY%%MM%%DD%
rem
rem
pause

バッチファイル 日付ごとにバックアップする方法

下記の方法では、日付 /(スラッシュなし) の表示方法を利用し、日々バックアップを上書きせずにため込む事が可能になります。

日付フォルダ / (スラッシュなし) robocopy

日付ごとのrobocopy バッチファイルコード

@echo off

rem 日付をYYYY/MM/DD形式からYYYYMMDD形式にする
set YYYY=%date:~0,4%
set MM=%date:~5,2%
set DD=%date:~8,2%

echo %date%
echo %YYYY%%MM%%DD%

mkdir C:\backup\%YYYY%%MM%%DD%

robocopy /e “対象のコピー元フォルダ” “C:\backup\%YYYY%%MM%%DD%”

日付フォルダを作成後、日付フォルダへコピーできるので日々のバックアップは永続的に使えます。1日あたりのログ容量が大きい場合は、バックアップ先のディスクが容量超過にならないようきをつけましょう。

robocopy バックアップ まとめ

1年のみのバックアップが必要ならYYYY部分をコードから除外すれば、1008の4桁のフォルダになるので来年は上書き保存になります。

1か月のみのバックアップが必要なら YYYY(年)MM(月)をコードから除外すれば、08の2桁のフォルダになるので来月は上書き保存になります。

1日に数回バックアップが必要なら timeコマンドを利用すれば、年月日+時間になるので何回でもバックアップが可能になります。

これでバックアップの世代管理が問題なくできます。用途に合わせて西暦の抽出をしましょう。

バッチファイルを作成して、更にタスクスケジューラーを利用すれば毎日の日付フォルダが作成することが出来ます。タスクスケジューラーの設定方法は過去記事から確認できます。

それではー!

ABOUT ME
なお
フルスタックエンジニアを目指すサラリーマン。インフラ、WEBを中心に色んなIT関連情報に手を出したいと思います。
ブログランキング

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA