現在開いているファイルを閉じたとき、そのファイルがあるフォルダごと別のフォルダにミラーリングするスクリプトです。
スクリプトトリガに設定しておけば、自動的にフォルダごとまとめてバックアップを取ることができます。
目次
1. ミラーリングスクリプト
変数「$ミラー先フォルダ」に、ミラーリング先を指定します。
ミラー元は、開いているファイルが入っているフォルダとなるようにしています。
「Eventを送信」には以下の計算式を指定します。
"PowerShell /c Wait-Process -Name 'FileMaker Pro' -Timeout 3 ; robocopy '"
& Substitute ( Get (ファイルパス) ; [ "file:/" ; "" ] ; [ Get (ファイル名) & ".fmp12" ; "" ] )
& "' '"
& $ミラー先フォルダ
& "' /dcopy:t /mir /fft /r:0 | Out-Null"
2. スクリプトトリガの設定
スクリプトを作成したら、ファイルを閉じるときのスクリプトトリガに設定します。
ファイル > ファイルオプション > スクリプトトリガ のタブを開き、「OnLastWindowClose」に設定します。
これで、ファイルを閉じるときに自動でスクリプトが実行され、フォルダごとミラーリングされます。
3. FileMakerが終了するのを待機する
スクリプトでは PowerShell を使いました。
ミラーリングする前に、まずFileMakerが終了するのを待っています。
Wait-Process -Name 'FileMaker Pro' -Timeout 3
「Wait-Process」で、指定したプロセスが終了するのを待ちます。
FileMakerのプロセス名は「FileMaker Pro」です。
ファイルを閉じてプロセスが終了した時点で、次のコマンドに進みます。
「-Timeout」は、待つ秒数の上限を指定するオプションです。
もし複数の無関係なFileMakerファイルを開いていた場合は、その数だけプロセスが実行されています。
現在のファイルを閉じても、他のファイルが実行中ならプロセス名は残っているので、その時に待ち続けてしまわないようにタイムアウトを設定しています。
3秒も待てば現在のファイルは閉じられていると思うので、今回のスクリプトではそうしています。不確かな要素でもあるので、必要なら長めの秒数を指定してください。
これで、「FileMaker Pro」というプロセスがすべて終了したらすぐに、もしプロセスが残っていても3秒後には次のコマンドが実行されることになります。
4. ミラーリングを行う
ミラーリングには、「robocopy」を使います。
コマンドは、以下のような指示になっています。
robocopy 'ミラー元フォルダパス' 'ミラー先フォルダパス' /dcopy:t /mir /fft /r:0 | Out-Null
「robocopy」のオプションをいくつか指定しています。
- /dcopy:t … ディレクトリのタイムスタンプもコピーする
- /mir … コピー方法にミラーリングを指定する記述
- /fft … 更新日時が2秒以内なら同じファイルとして扱う
- /r:0 … 失敗時の再試行回数
以上のオプションで「robocopy」を使うと、ミラー元とミラー先が全く同じ構成になります。
「Out-Null」は、「robocopy」の実行結果を表示しないための記述です。
ファイルを閉じたときにバックグラウンドでミラーリングすることを想定していますので、不要な表示はしないようにしています。
動作環境: Windows10, FileMaker Pro 16