Windowsで外部HDDにバックアップを行うバッチファイルを書いてみた。robocopyを使っているので二回目から速い。
やりたかったこと。
- Cドライブから、外付けHDDであるDドライブへコピー。
- 0時に自動で実行してほしい。
- 0時にPCがスリープ状態でも実行してほしい。
- 実行したらPCをシャットダウンしてほしい。でないと二日間放置したとき、変更がないのにバックアップしちゃってムダだから。
- PCまるごとバックアップじゃなくて、フォルダ単位で指定したい。
- せっかくなので5世代ほどバックアップしたい。
- Dドライブはこういう構成にする。
Dドライブ
│
├─ ★バックアップ用のHDDです★(バックアップ用ドライブの存在フラグ)
│
├─ 01_Backup(バックアップフォルダ)
│ │
│ ├─ 2016.01.01._00.00.00
│ │ ├─ フォルダ単位のバックアップ
│ │ └─ フォルダ単位のバックアップ
│ │
│ ├─ 2016.01.02._00.00.00
│ │ ├─ フォルダ単位のバックアップ
│ │ └─ フォルダ単位のバックアップ
│ │
│ └─ 以下、5つまで続く。
│
└─ 02_BackupLog(ログフォルダ)
│
├─ 2016.01.01._00.00.00
│ ├─ フォルダ単位のバックアップログ
│ └─ フォルダ単位のバックアップログ
│
├─ 2016.01.02._00.00.00
│ ├─ フォルダ単位のバックアップログ
│ └─ フォルダ単位のバックアップログ
│
└─ ログはこれまでのを全部残す。
定期実行にはWindowsのタスクスケジューラを使用。
- 全般タブ
- ユーザがログオンしているかどうかにかかわらず実行する、にチェック。
- パスワードを保存しない、にチェック。
- 最上位の特権で実行する、にチェック。
- トリガータブ
- 実行間隔と時刻を記述。
- 有効、にチェック。
- 操作タブ
- プログラム/スクリプトにいま書いたスクリプトの場所を設定。例、"C:¥robocopy_backup.bat"
- 開始ってところに上記スクリプトのディレクトリ名をダブルクォーテーションなしで記述。例、C:¥
- このパスにスペースが含まれていたり、カッコが含まれているとうまくいかないっぽい。具体的には、実行はできるんだが、タスクスケジューラの実行結果が0x1になっちゃうことがあった。
- 条件タブ
- タスクを実行するためにスリープを解除する、にチェック。