Hatena::ブログ(Diary)

itouhiroメモ

2013-01-16 [Windows] 上書き保存のたびにファイル名に時刻つけてバックアップ

f:id:itouhiro:20130116193640p:image ファイルを単にバックアップするなら、Dropbox使えばネットにバックアップして、過去バージョンに戻すこともできますが、小回りがききません。

  • 過去バージョン複数を、すばやく見比べたい。
  • 大きなデータなので、保存のたびに圧縮したい。
  • 社外秘のファイルなので、ネットにアップロードする前に暗号化したい。

こういった用途には、細かな調整のできる、これから説明する方法でバックアップを取ると便利です。


f:id:itouhiro:20130116185126p:plain



環境


仕様

  • ファイルを上書き保存するたびに
    • ただし1分以内の更新は上書きされる
  • タイムスタンプつけたファイル名にする
    • はに丸.txt」というファイルは、バックアップ先では「はに丸-20130116-1516.txt」になる。ファイル更新時刻を文字列につける。
  • 別の場所にコピー
    • 別フォルダ R:\backup にでもよいし、
    • ネットワークでつながる別PC \\OtherPC\backupdir にでもよい。
    • 同じフォルダへはやめたほうがよい。(一度タイムスタンプついたファイルにさらにタイムスタンプがつく‥‥の事態になるから)
    • 圧縮してバックアップすることもできる。(テキストファイルは圧縮すればファイルサイズ小さくなりますが、最初から圧縮してあるファイルも多いです。Word,Excelのdocx,xlsxとか、画像ファイルのjpg,gifも圧縮済み)
    • 暗号化してDropboxにアップロードすることもできる。


手順

  • fwatchをダウンロード・インストールする。 私は fwatch1.8.0.5_unicode.zip を取得して、 C:\home\bin\fwatchに fwatch.exeなどを配置した。詳しくは http://fwatch.sourceforge.jp 参照。
  • fwatch.exeあるのと同じフォルダに copystamp.bat というテキストファイルを置く。中身は
@echo off
SET BACKUPDIR=R:\work-backup
REM 引数1の存在確認
IF NOT EXIST %1 EXIT /B
REM フォルダでないことを確認
echo %~a1|find "d">NUL
if %ERRORLEVEL% EQU 0 exit /b
REM ファイルサイズ確認
IF "%~z1" == "0"  EXIT /B
REM ファイル更新日時から時刻文字列を得る
SET TSTAMP=%~t1
SET TIMESTR=%TSTAMP:~0,4%%TSTAMP:~5,2%%TSTAMP:~8,2%-%TSTAMP:~11,2%%TSTAMP:~14,2%
if not exist %BACKUPDIR% mkdir %BACKUPDIR%
REM ファイル名%~n1 ファイル拡張子%~x1
copy %1 %BACKUPDIR%\%~n1-%TIMESTR%%~x1
EXIT /B

f:id:itouhiro:20130116182930p:plain

最初のほうにある R:\work-backup というのがバックアップ先のフォルダです。好きなフォルダに変えてください。

  • fwatchを設定します。[追加]ボタンを押して、 http://fwatch.sourceforge.jp/menu.html の画面で以下を変更します。
    • [監視対象 - 監視するフォルダ] Z:\work
    • [監視対象 - 監視するファイル] *.txt
    • [実行するアプリケーションの設定 - アプリケーションのパス] C:\home\bin\fwatch\copystamp.bat
    • [実行するアプリケーションの設定 - ウィンドウのサイズ] 非表示

f:id:itouhiro:20130116184158p:plain

compstamp.batをファイル選択ダイアログで選択するときは、この画像のようにします。


  • これで、Z:\work フォルダにある *.txtの拡張子のついたファイルは、上書き保存のたびに R:\work-backupフォルダにバックアップされます。
  • [スタート - すべてのプログラム - スタートアップ]にfwatchのショートカットアイコンを置いておけば、Windows再起動後も自動でfwatch起動してくれます。


ファイルを暗号化して、クラウド(Dropbox)にもバックアップ


ファイルをただコピーするだけではなく、

  • 圧縮してファイルサイズを縮める
  • 暗号化してDropboxにアップロード

したい場合は、以下のようにします。


  • 7-zip http://sevenzip.sourceforge.jp/ をインストールする。Windowsが64bitの場合は64bit版をインストールしましょう。
  • fwatch.exeあるのと同じフォルダに encryptstamp.bat というテキストファイルを置く。中身は
@echo off
SET BACKUPDIR=C:\Users\USER_NAME\Dropbox\myPaint
REM 引数1の存在確認
IF NOT EXIST %1 EXIT /B
REM フォルダでないことを確認
echo %~a1|find "d">NUL
if %ERRORLEVEL% EQU 0 exit /b
REM ファイルサイズ確認
IF "%~z1" == "0"  EXIT /B
REM ファイル更新日時から時刻文字列を得る
SET TSTAMP=%~t1
SET TIMESTR=%TSTAMP:~0,4%%TSTAMP:~5,2%%TSTAMP:~8,2%-%TSTAMP:~11,2%%TSTAMP:~14,2%
if not exist %BACKUPDIR% mkdir %BACKUPDIR%
REM ファイル名%~n1 ファイル拡張子%~x1
echo P455w07d| "C:\Program Files\7-Zip\7z.exe" a -p %BACKUPDIR%\%~n1-%TIMESTR%%~x1.7z %1
del *7z.tmp*
EXIT /B

最初のほうにある C:\Users\USER_NAME\Dropbox\myPaint というのがバックアップ先のフォルダです。あなたの使うDropboxフォルダに変えてください。USER_NAMEのところも修正します。

最後のほうにある P455w07d というのが、ファイルを暗号化するパスワードです。適当なパスワードに変えてください。もう少し長いほうがいいかも。

  • fwatchを設定します。[追加]ボタンを押して、 http://fwatch.sourceforge.jp/menu.html の画面で以下を変更します。
    • [監視対象 - 監視するフォルダ] Z:\work
    • [監視対象 - 監視するファイル] *.*
    • [実行するアプリケーションの設定 - アプリケーションのパス] C:\home\bin\fwatch\encryptstamp.bat
    • [実行するアプリケーションの設定 - ウィンドウのサイズ] 非表示
  • これで、Z:\work フォルダにある どんな拡張子のファイルでも、上書き保存のたびにDropboxのmyPaintフォルダに、暗号化された上でバックアップされて、Dropboxが自動的にネット上にもバックアップしてくれます。
  • はに丸.bmp」というファイルは、バックアップ先では「はに丸-20130116-1516.bmp.7z」になります。

f:id:itouhiro:20130116192836p:plain


暗号化したファイルを元に戻すには、以下のBATファイルにドラッグ&ドロップすればいいです(展開したいフォルダを z:\home\privacy とした場合)。

un7z.bat

mkdir z:\home\privacy
z:
cd \home\privacy
"c:\Program Files\7-Zip\7z.exe" x -pP455w07d %*



タイムスタンプをつけない

ちなみに「タイムスタンプつけない」やり方もあります。

txtファイルやExcelファイルを「タイムスタンプつけず」ただ暗号化してDropboxに上書きバックアップするには‥‥

c:\home\secret に保存した MyPlan.txt を、以下のbatファイル使えば MyPlan.txt.7z としてバックアップできますよ。これだと何回上書き保存してもファイルが増えないので使い勝手がよいです。

@echo off
SET BACKUPDIR=C:\Users\USER_NAME\Dropbox\secret
REM 引数1の存在確認
IF NOT EXIST %1 EXIT /B
REM フォルダでないことを確認
echo %~a1|find "d">NUL
if %ERRORLEVEL% EQU 0 exit /b
REM ファイルサイズ確認
IF "%~z1" == "0"  EXIT /B
if not exist %BACKUPDIR% mkdir %BACKUPDIR%
REM ファイル名%~n1 ファイル拡張子%~x1
echo P455w07dH4rd| "C:\Program Files\7-Zip\7z.exe" a -p %BACKUPDIR%\%~n1%~x1.7z %1
del *7z.tmp*
EXIT /B


バックアップはずっと持っていても意味ないので適当なタイミングで消しましょう。


あと書き

fwatchは最近知ったのですが、まさにほしい機能を備えたソフトでした。

以下のページも参考にしました。