FileMakerでファイルやフォルダの存在を確認するスクリプト

FileMakerのスクリプトで、変数を利用して任意のファイルやフォルダの存在を確認する方法です。
ファイルを確認するだけなら、専用のテーブルやフィールドを用意しなくてもできます。
フォルダを確認するときでも、空のグローバルフィールドを1つ用意するだけでできます。


目次

  1. ファイルの存在を確認する
  2. フォルダの存在を確認する

1. ファイルの存在を確認する

まず、変数「$確認するファイル」を絶対パスで指定します。フォルダ区切りには「/」を使うようにしてください。

変数「$確認用パス」は後の「ファイルを挿入」ステップの「ファイル指定」ダイアログで使うため、絶対パス用の「file:/」を前に付けて使います。

"file:/" & $確認するファイル

「ファイルを挿入」ステップは3つの項目がありますので、以下のように指定します。

  1. 「ファイルを挿入」オプション … 格納オプションを「参照」にする。
  2. ターゲットの指定 … 変数に「$挿入用変数」を指定する。
  3. ファイル指定 … 「$確認用パス」を指定する。

このスクリプトを実行したとき「$確認するファイル」が存在すれば、「ファイルを挿入」で「$挿入用変数」にファイル参照が入り、エラーは「0」になります。
ファイルがなければエラー「100(ファイルが見つかりません)」が返りますので、それによって分岐できます。

今回はスクリプトをシンプルにお見せするため、絶対パス限定にしています。相対パスを絶対パスに変換したいときは、以下のようにしてください。

Substitute ( Get ( ファイルパス ) ; [ "file:/" ; "" ] ; [ Get ( ファイル名 ) & ".fmp12" ; "" ] ) & "相対パス"


2. フォルダの存在を確認する

変数「$確認するフォルダ」を絶対パスで指定します。フォルダ区切りには「/」を使うようにしてください。末尾の「/」はあってもなくても動作するようにしてあります。

変数「$確認用パス」には先ほどと同様に「file:/」を付け、終わりに「/Check.tmp」を付けます。確認するフォルダにチェック用ファイルを書き出す用途で使います。

"file:/" & $確認するフォルダ & "/Check.tmp"

さらに、変数「$テンポラリ」を用意します。
これは、後の「フィールド内容のエクスポート」で使います。後述しますが、必ず存在するフォルダを指定したいので、FileMakerが使っているテンポラリフォルダを取得し、任意のファイル名を付加しておきます。ここでは「Error.tmp」にしました。

Get ( テンポラリパス ) & "Error.tmp"

次に、「フィールド内容のエクスポート」を使ってチェック用ファイルを書き出します。項目は2つあります。

  1. フィールド指定 … 空のグローバルフィールド(テキストタイプ)を指定する。
  2. 出力ファイルの指定 … 「$確認用パス」と「$テンポラリ」を、この順番で指定する。

ここで「$テンポラリ」を使いました。
これは、「$確認するフォルダ」が存在せず「$確認用パス」にチェック用ファイルを書き出せなかった際、「$テンポラリ」に書き出す、という指示になっています。

「フィールド内容のエクスポート」は、出力ファイルパス一覧のどれにも書き出しができなかったとき、次のようなエラーダイアログを出してしまいます。

なんと「エラー処理 [オン]」ステップを最初に入れてあってもダイアログが出てしまうので、それを防ぐために、必ず書き出せる「$テンポラリ」を用意したわけです。

そして「ファイルを挿入」ステップで、「$確認用パス」を「$挿入用変数」に挿入します。3つの項目は、ファイルの存在確認のときとまったく同じです。
「$確認するフォルダ」が存在していれば「$挿入用変数」にファイル参照が入るので、エラーコードによって分岐できます。

チェック用に書き出したファイル「Check.tmp」や「Error.tmp」は、FileMakerの標準スクリプトでは削除できませんので、「Eventを送信」を使ってコマンドプロンプトから削除します。

フォルダが存在して「Check.tmp」を書き出した場合は次のように削除します。

"cmd /c del ""
& Substitute ( $確認するフォルダ ; "/" ; "\\" )
& "Check.tmp""

フォルダが存在せず、「Error.tmp」を書き出した場合は次のように削除します。

"cmd /c del ""
& Substitute (
Replace ( $テンポラリ ; 1 ; 1 ; "" ) ;
"/" ; "\\" )
& """

ポイントが2つあります。

  • コマンドプロンプトにパスを渡すとき、念のため「/」を「\」に変換する。
  • 「Get ( テンポラリパス )」で取得したパスは先頭に「/」が付いているので、除去してから使う。

Windowsのコマンドプロンプトは、フォルダ区切りが「/」だと動作しないコマンドがありますので、パスを渡すときは習慣として「\」に変換した方が良いです。
Macが起源のFileMakerのスクリプト内では、逆に「/」を使った方が良いです。

「Get ( テンポラリパス )」は先頭に「/」が付いています。除去しないとコマンドプロンプトで認識してくれないので「Replace」を使っています。
構文は次のようになっています。先頭から決まった文字数だけ削除するには便利な関数です。

Replace (テキスト ; 先頭文字位置 ; 文字数 ; 置換テキスト)

ちなみに、ファイルの削除に「フィールド内容のエクスポート」を使う方法もあります。フィールドを指定せずに、出力ファイルだけ指定するというものです。
しかし、この方法はエラーコード「102(フィールドが見つかりません)」を返していますので、もし使う際は一応ご留意ください。

動作環境: Windows10, FileMaker Pro 16

Leave a comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

3 + 12 =

2 thoughts on “FileMakerでファイルやフォルダの存在を確認するスクリプト”