« 外部スピーカーの音がしょぼくなったぞ | トップページ | Excel 2007の対数グラフの軸範囲指定 »

2011年12月10日 (土)

履歴ありのバックアップ

半年ほど前に仕事で使っているWindows機のHDDが壊れたのを機に、外付けのHDDにバックアップを取るようにしている。最初はxcopyコマンドでコピーしていたのだけど、今はrobocopyコマンドを使っている。

今回、過去のバックアップ何回か分も履歴として保存できるようにしてみた。コマンドプロンプトで実行する簡単なバッチファイルを作成した。

@echo off
REM %1:バックアップ元 %2:バックアップ先 %3:履歴数
setlocal
set /a A=%3%-1
:LOOP
if "%A%"=="0" (goto EXIT)
set /a B=%A%-1
if "%B%"=="0" set B=
echo Refresh backup #%A%
robocopy %2%B% %2%A% /MIR /XJ /XO /R:0 /W:0
set /a A=A-1
goto LOOP
:EXIT
echo Refresh backup
robocopy %1 %2 /MIR /XJ /XO /R:0 /W:0
endlocal
@echo on

これをHB.cmdなどという名前で保存して実行する。引き数は「バックアップ元 バックアップ先 保存数」。
たとえば

HB SourceDir DestDir 3

として実行すると、二回目の実行時にはその前のバックアップが保存されたDestDir1というディレクトリが作成され、三回目の実行時にはDestDir2が作成される。四回目以降の実行では、DestDir2にはその前の回のDestDir1が入り、DestDir1には前回のDestDirの内容が入るように更新されていく。

バックアップ元とバックアップ先はどちらもディレクトリを指定して動作を確認した。動作確認の環境はWindows XP SP3なので、Vistaや7ではちゃんと動かないかもしれない。

バックアップ元とバックアップ先の指定に、空白文字の入ったパスをダブルクォーテーションで囲って指定してもちゃんと動いていた。例えば

HB "C:\Documents and Settings\MyAccounts\My Documents" "D:\Backup\Space in path" 3

なんてのでもちゃんと動いていた。robocopyの仕様なのかよくわからないけど。

ついでに、moveコマンドを使って最初のバックアップの名前を変えようとしたら、どこか間違っているのかそれともダブルクォーテーションで囲ったパスではだめなのか、とにかくうまく動かなかった例 (^_^;)

@echo off
REM %1:バックアップ元 %2:バックアップ先 %3:履歴数
setlocal
set /a A=%3%-1
:LOOP
if "%A%"=="0" (goto EXIT)
set /a B=A-1
if "%B%"=="0" set B=
echo Refresh backup #%A%
echo move %2%B% %2%A%
set /a A=A-1
goto LOOP
:EXIT
echo Refresh backup
echo move %2%3 %2
echo robocopy %1 %2 /MIR /XJ /XO /R:0 /W:0
endlocal
@echo on

|

« 外部スピーカーの音がしょぼくなったぞ | トップページ | Excel 2007の対数グラフの軸範囲指定 »

Windows」カテゴリの記事

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック


この記事へのトラックバック一覧です: 履歴ありのバックアップ:

« 外部スピーカーの音がしょぼくなったぞ | トップページ | Excel 2007の対数グラフの軸範囲指定 »