はじめに
当初、簡単にシャドウコピーによるバックアップをやろうと思っていました。
が、対象ドライブに巨大ファイルがあり断念。。。
robocopyコマンドで特定フォルダのみバックアップするようにすることに
とりあえず、ベースは作成したので後は運用しながらチューニングしていくつもり
※しばらくしたら、バックアップフォルダは古い日時のデータ消すようにしないとな...
プログラム
定期実行はタスクスケジューラ等に登録すればいいかな...と
C:\wakasama\Program
C:\wakasama\iso
powershell.exe -Command "exit (Get-Date).DayOfWeek"
if %errorlevel% == 4 (
set FULLBACKUP=1
) else (
set FULLBACKUP=0
)
REM バックアップ対象フォルダ読込
setlocal enabledelayedexpansion
for /f "usebackq tokens=*" %%A in (targetFolder.txt) do (
REM バックアップ対象フォルダ出力
REM echo %%A
set MYFOLDER="%%~nA"
REM バックアップフォルダ名出力
REM echo !MYFOLDER!
if %FULLBACKUP%== 1 (
echo フルバックアップ実施!!
REM 完全バックアップ
REM robocopy %%A C:\wakasama\wakasama\work\backup\%DATE:/=%\!MYFOLDER! /MIR /UNILOG+:.\backup_%DATE:/=%.txt
robocopy %%A C:\wakasama\wakasama\work\backup\%DATE:/=%\!MYFOLDER! /MIR /R:1 /W:1 /UNILOG+:.\backup_%DATE:/=%.txt
REM アーカイブ属性リセット
attrib -A %%A\* /S
) else (
REM 差分バックアップ
echo 差分バックアップ実施!!
REM robocopy %%A C:\wakasama\wakasama\work\backup\%DATE:/=%\!MYFOLDER! /MIR /A /UNILOG+:.\backup_%DATE:/=%.txt
robocopy %%A C:\wakasama\wakasama\work\backup\%DATE:/=%\!MYFOLDER! /256 /S /PURGE /A /R:1 /W:1 /UNILOG+:.\backup_%DATE:/=%.txt
)
)
endlocal
PUSHD C:\wakasama\wakasama\work\backup
REM 更新日時が新しい7つ(skip=7)以外のディレクトリ削除
for /f "skip=7" %%A in ('dir /AD /O-D /B') do RD /S /Q %%A
POPD
robocopyオプション詳細
/XF ファイル:指定された名前/パス/ワイルドカードに一致するファイルを除外します。
/XF "~." "~$*.*" "Thumbs.db" "desktop.ini" "
$RECYCLE.BIN" ".suo"
◆robocopyでドライブの内容を丸ごとコピーする方法
https://qiita.com/nezumin/items/488b66479e878d12b669
警告
"$"の前には"`"(バッククオート)を付与する必要があるみたい!!
/256:256 文字を超える非常に長いパスのサポートをオフにします。
◆ROBOCOPY でコピーしたファイルのファイル名が長すぎて削除できない
https://pig-log.com/robocopy-delete-longpath/
◆robocopyとファイルパス長について
https://social.technet.microsoft.com/Forums/ja-JP/f0db5e3b-1e52-40a6-99e1-a281a5d115d2/robocopy123921250112449124521252312497124733826312395123881235612?forum=windowsserver2008ja
警告
robocopyは256文字を超えるファイルをバックアップするため、差分バックアップを取ろうとすると毎回取得する結果になってしまうため、オプションを指定してバックアップ取得しないようにしている。
※フォルダ自体は作成されてしまうため、どうしようか思案中...
参考サイト
◆robocopyとバッチファイルで世代管理バックアップをする方法
https://blog.ver001.com/robocopy-generation-backup/
◆robocopyで世代管理しながら差分、増分バックアップをする方法
https://blog.ver001.com/robocopy-differential-backup/
◆Robocopyの基本動作とコマンドオプション解説
https://n-archives.net/software/robosync/articles/robocopy-specs-and-command/
◆コマンドプロンプトから曜日を取得する (with PowerShell)
https://zenn.dev/rabitarochan/articles/e2f06d19ceb017
◆バッチファイルでファイルパスからファイル名や拡張子を自由に取り出す方法
https://orangeclover.hatenablog.com/entry/20101004/1286120668
◆RoboSync関連記事
https://n-archives.net/software/robosync/articles/