2009/04/09(Thu)半自動プロファイル同期スクリプト

2009/04/09 2:44 Software::Windows
コンピュータを複数所持すれば、それぞれのPCのアプリケーションのプロファイルを最新のものにしておきたいものだが、なかなかこれが面倒ですよね。
多くの場合は、
  • NASのような共用ディスクスペースにプロファイルを設置する
  • PC同士のプロファイルをバックアップツールなどによってコピーする
という手法をとると思いますが、なかなか面倒です。*1

いずれのやり方も、それぞれのPCを同期時にネットワーク接続する必要があります。
例えば、自宅と会社間でのブラウザのプロファイルを一定に保ちたいとして、2つのPCを同じネットワークに繋ぐのは無理ですね。


どうにかならないものか…。というわけで、久々にバッチファイルを書いてみた。

*1 : 他にもUSBメモリで持ち運ぶ手もありますが、面倒な事には違いないです

仕組み

非常に単純。
プロファイルを変更した場所では、プロファイル全体をrarで固めて、sshが動いているサーバーにscpでぽいっと投げ、更新する場所では逆の操作をするだけです。
最初はftpでもよいかな?と思ったけど、Basic認証が必要なRSSなども登録しているので、ここはセキュアにscpを使う事に。

私はSleipnirのプロファイルを同期したかったので、こんな感じになった。(backupとcacheを除くために細かい指定をしてます)
固めるファイル類は自分が同期したい物に合わせて変更してください。

送信側

まず、プロファイルを変更した側で動かす送信側。
@echo off
set COMMENT=rarcomment.txt
set FILENAME=sleipnir_profile.exe

echo Title=Sleipnir User Profile %DATE% %TIME:~0,8%>%COMMENT%
echo Text>>%COMMENT%
echo {>>%COMMENT%
echo ^<h1^>Sleipnir User Profile^</h1^>Last Update: %DATE% %TIME:~0,8%>>%COMMENT%
echo }>>%COMMENT%
echo Path=\>>%COMMENT%
echo Overwrite=1>>%COMMENT%

"C:\Program Files\Winrar\WinRAR.exe" a -m4 -ibck -sfxDefault.SFX -ep2 -z"%COMMENT%" "%FILENAME%" "W:\Download Soft\Sleipnir\settings\Kero\*.*" "W:\Download Soft\Sleipnir\settings\Kero\setting\Override" "W:\Download Soft\Sleipnir\settings\Kero\setting\styles" "W:\Download Soft\Sleipnir\settings\Kero\setting\*.*"
del %COMMENT%

cd /d "W:\Download Soft\PuTTY\"
pscp.exe -i "my-rsa-key.ppk" "%~dp0%FILENAME%" user@example.com:profiles/>nul
del "%~dp0%FILENAME%"
rarのオプションに関しては、
a
圧縮モードにする:
-m4
圧縮重視に設定:
-ibck
バックグラウンド圧縮:
-sfxDefault.SFX
Default.SFXを用いた自己解凍書庫に圧縮:
-ep2
ドライブレターを除くフルパスで保管:
-z"%COMMENT%"
コメントファイルを指定:
詳しくは、WinRAR.chmというヘルプを参照。


コメントファイルの中に指定の形式で書き込むことにより、自己解凍書庫の高度な設定が出来るらしい。
タイトルと本文の設定、解凍パスをルートに設定して、上書きを確認しないという設定をした。
ちなみにTextの部分はHTMLで記述できるので装飾なりはお好きなように。ただ、バッチファイルで<や>をそのまま書くとエラーになるので、^でエスケープするのをお忘れなく。

何故、普通のrarではなく自動解凍書庫なんかにしているかという理由については、受信側でWinRARが不要という点と、バッチによって解凍しない場合も、デフォルトの解凍場所が設定されていた方がいいいう理由によってである。
また、解凍先を\としているのは、送信側のSleipnirのプロファイルはW:\Download Soft\Sleipnir\settings\Kero\setting\だが、受信側は同じ場所だったり、同じフォルダ構造だがCドライブにあったりという理由により。ドライブレター決めうちで良い場合はそうすれば良い。

pscpに関しては、puttyに含まれているものを流用した。
私はiceiv+puttyのビルドを愛用しているので、まだ導入していない方は準備を。
鍵ファイルを指定しておくと、パスワード要らず。

受信側

@echo off
set FILENAME=sleipnir_profile.exe

cd /d "W:\Download Soft\PuTTY\"
pscp.exe -i "my-rsa-key.ppk" user@example.com:profiles/%FILENAME% .>nul
"%FILENAME%" -s2
del "%FILENAME%"
こちらは単純に受信してきて、解凍処理を実行するだけ。
オプションの-s2というのは、確認せずに解凍を開始し、進捗状況は表示するというもの。
送信側で埋め込んだLast updateなどを確認してから解凍したいという人は、-s2を外せば解凍画面(以下)をワンクッション挟むので、インストールを押せばそれでよい。

winrar_sfx.png


感想

バッチファイルだけで出来ることは結構限られているけれど、いろんなアプリを組み合わせればこう言ったことが簡単にできてしまう。便利だなぁ~。

自分は必要な時にバッチファイルを動かして処理すればよいと思ってるけど、完全に自動化したい人は、Windowsのタスクスケジューラを併用すればよいと思います。