Windowsで使える標準のバックアップ機能。
コントロールパネルから行く方では無くコマンドの方。Vsita以降のWindowsは robocopy というコマンドが新たに追加されているそうな。Vistaを飛ばし7歴2年少々な上、Windows標準機能不信なので知らなかった。
せっかく付いているのでどのような機能か紹介。
今回の記事はバッチファイルやスクリプトなど少し難しい為、PCやWindowsの自称初心者ならばrobocopyの紹介は飛ばしいきなりまとめをどうぞ。
robocopyコマンドで自動バックアップする方法
参考にしたページはこちら。
Windowsのrobocopyコマンドでフォルダをバックアップ/同期 - @IT
http://www.atmarkit.co.jp/ait/articles/0704/20/news130.html
同期も可能とは凄い。コマンド実行は問答無用で処理する可能性が高くやや危険度が高い為、まずは本当に@ITの解説通り処理出来るか試してみましょう。
robocopyでテストフォルダ同士を同期
コマンドを打てるようcmdを起動。
Cドライブ直下へフォルダ名 test を作成。
@ITの説明通りコマンドを実行すると下のような表示になり処理完了。
ここから¥を半角で書くとバックスラッシュになり分かり難いと思うので¥のみ全角で。コマンドは、
robocopy /mir c:¥test d:¥test
ロボコピーコマンドにmir(ミラーリング、同期)のオプションを指定し、Cドライブ直下のtestフォルダ内を全部Eドライブ直下のtestフォルダと同期。Eドライブのtestフォルダを勝手に作ってくれるか期待したところ自動で生成されておりました。
適当にダミーのフォルダとファイルを作成したrobocopy実行後。
適当なフォルダなどを削除しもう一度robocopyを実行。
同期されております。
何度もコマンド打つのは面倒なので、テスト時はコマンドを一度実行した後にF5キーを押してみましょう。直前のコマンドが丸ごと一発で入力されるはず。
バッチファイルで自動処理化
それにしても毎回コマンド打つのは面倒なのでバッチファイル化。適当なテキストファイルを作り、以下のように入力。
robocopyコマンドの次の行 pause は一時停止。テキストファイルを保存し、拡張子を bat へ変更。※ backup.bat
実行するともちろん動く。
何かキーを押して上の窓が閉じたなら正常動作。
ユーザフォルダを指定した本番用バッチ
テストは終わりとし、ガチなバックアップ用へ書き直し。
%UserProfile% は私のPCでいうと、C:¥Users\1226 の事で、ユーザ名を決め打ちせず起動ドライブの現在のユーザフォルダを指定可能なので汎用性が高くなる。
バックアップフォルダはEドライブ直下の backup とし、最後のオプション /r:0 はエラーが出たならスキップしろ(正確には再試行するな)の意味。これ無しでドキュメントフォルダ内全部同期を実行すると一瞬で詰まってしまうはず。
実行してみると本当にバックアップが始まったので窓を閉じて停止。
バックグラウンドで実行するようVBSで処理
バッチファイルの処理画面は見る必要が無く、タスクスケジューラーで定期的に実行するなら突然窓が開いてしまうので単純に邪魔。
というわけでもう一手間かけ、バッチファイルをVBSで実行しましょう。
テキストファイルを作りスクリプトを書く。¥は全角になっているので変換を。
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run ("C:¥test\backup.bat"), vbhide
1行目でオブジェクトを作り、2行目でバッチファイルを実行。その際に vbhide で見えなくしてしまえば良いという仕組。拡張子を vbs へ変更。※ backup.vbs
ファイルの置き場所はCドライブのテストフォルダになっている為、場所を変更するなら書き換えましょう。VBSとバッチファイルはいずれも同じフォルダ。
テストフォルダの同期をVBで実行すると上の通り全て鏡写しになり成功。一瞬たりとも黒い窓は出ずに処理完了。画像の上はC、下はEドライブ。
但し、私はVBS良く知らないのでVB版でバックグラウンド処理にした場合、止めたい時にどうやって停止させるのかは分からない。
窓辺さんがコメントで教えてくれそうな気がするので期待。
タスクスケジューラで定期的に自動実行
ここまで脱線して解説するつもりは無いので@ITへ丸投げ。
タスクスケジューラの基本的な使い方(Win7/8.x/10編) (1/2) - @IT
http://www.atmarkit.co.jp/ait/articles/1305/31/news049.html
またはWindowsのシャットダウン前に実行したいなら、バッチファイルの最後に shutdown.exe -s -t 0 を追加するとrobocopyのコマンドが終わり次第、待ち時間0秒でシャットダウン。
robocopy /mir %UserProfile% e:\backup /r:0
shutdown.exe -s -t 0
pause
VB版で実行する際は最後の pause は意味が無いので削除を。
Windows標準機能は何か足りないという不満(まとめ)
バッチ、スクリプト書かなくともVista以降ならばWindowsにはグラフィカルで分かり易いバックアップ機能が付いております。
上は私のメインPCのWindows 7での画面、他のバージョンもだいたい同じはず。行き方は赤枠内の通りでコントロールパネルから。
使い方はマイクロソフトが分かり易く解説しているので省略。
初心者でもわかる! Windows 7 でバックアップ
https://support.microsoft.com/ja-jp/kb/2666277
但し肝心な部分は2016年4月現在リンクが切れており、初心者には解らないと思うので貼り直しておきましょう。
- 特定のフォルダーやファイルを、必要な時にバックアップする方法
- 特定のフォルダーやファイルを、定期的にバックアップする方法
- パソコン全体を、必要な時にバックアップする方法
- パソコン全体を、定期的にバックアップする方法
しかしrobocopyでは強制コピーが出来ないので使用中のファイルのコピーは無理という無難な処理となっており、AppDataフォルダなどバックアップしたい場所がスキップされてしまう。
そして上記リンク先4種類の分かり易いバックアップはいずれもイメージで残す為、バックアップ先のHDDなどがほんのり壊れていた場合は復元出来なくなってしまう可能性が怖い。
というわけで、いずれの方法もやらないよりはマシ程度と考えた方が良いと思われ、少し手間でも他の方法でやるかバックアップ用ソフトの製品の購入をおすすめ。
私がそう感じているだけなので、Windowsのバックアップで良いと思う人はそれでもよろしいかと。robocopyやGUI(分かり易いやつ)で良い人はそれでどうぞ。私はFastcopy信者。
>robocopy
私も以前はrobocopyでバックアップをとっていたことがありますw
>Vistaを飛ばし7歴2年少々な上
私はVistaは半年しか使っておらず、すぐに7に移行しましたw
>窓辺さんがコメントで教えてくれそうな気がするので期待。
分かりませんが、「VBS 停止」で調べたらいくつか出てきましたw
スクリプトの開始と停止
https://technet.microsoft.com/ja-jp/scriptcenter/ff707270.aspx
Windows XP Tips 25 - Tips19 暴走したプログラムの停止方法:ITpro
http://itpro.nikkeibp.co.jp/article/COLUMN/20080611/307718/
WSH/スクリプトを中断する方法 - Windowsと暮らす
http://win.just4fun.biz/WSH/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%82%92%E4%B8%AD%E6%96%AD%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95.html
WSH - 一時停止(バッチファイルのpause): みズとおかズ
http://okazu.air-nifty.com/blog/2009/08/wsh---pause-9d3.html
どれが正解かは知りませんがw
>私はFastcopy信者。
私もFastcopy派ですw でもDドライブ(内蔵HDD)からFドライブ(外付けHDD)へバックアップを取ろうとすると、保存先がFastcopyのプログラムがあるフォルダーになってしまう罠がありますw Fドライブ(外付けHDD)にバックアップを取る場合はFastcopyをFドライブ(外付けHDD)にインストールしなければならないw
>バッチファイルの処理画面
私はあのDOS窓、ぼーっと見ているのはけっこう好きですね。※ただし暇な時に限る。
> vbhide で見えなくしてしまえば良い
とりあえず動いている事を確認したいなら「vbMinimizedNoFocus(最小化でフォーカスしない)」でしょうか。非表示だと作業を邪魔しませんが、個人的には何となく動作を目で確認したい派です。
現在はバックアップソフトを使用していませんね。手動コピーでバックアップしています。