Finder上のオブジェクト(ファイル、フォルダなど)を操作する場合、オブジェクトの指定は「参照」というものを使って行なわれます。参照とは、そのファイル/フォルダそのものを示す値のことです。Finderでは、
file "サンプル" of folder "書類" of startup disk
などという形でファイルを指定していましたね。これが「参照」です。参照は、オブジェクトを示すAppleScriptの形式であり、文字列ではありません。例えば、上のファイルの参照を文字列に変換してみると、
“HD-300SC:書類:サンプル”
といった形になってしまいます。つまり、参照は「『file "サンプル" of folder "書類" of startup disk』という文字列」ではなく、オブジェクトそのものなのです。ただ、オブジェクトそのものをスクリプトの中に貼りつけるわけにはいかないので、仮に「起動ディスクのフォルダ“書類”のファイル“サンプル”」という形の文字で表現してある、というわけです。
Finderでは、よく「○○の参照をお使いください」といったエラーが現われます。これは、使っている値がオブジェクトの参照ではない場合などによく現われるのです。
また、それぞれの属性は、値の型(クラス)が異なっているということに注意して下さい。型が異なっていると、うまく値をやり取りできません。
まず、考え付くのはこんな感じのものです。
on open drop_items tell application "Finder" set comment of drop_items to modification date of drop_items end tell end openこれをアプリケーション形式に保存して、実際にファイルをドラッグ&ドロップしてみると、エラーが起きてしまいます。
1.「選択書類」はリストであることを忘れている。
これがまず最初の問題です。ドラッグ&ドロップは、必ずしも1つのものだけがされるわけではありません。したがって、複数の項目がドロップされた場合を考えて、「〜を開くとは」で送られるパラメータは、リストの形になっているのです。
ですから、スクリプトも、複数項目に対応した形にしてやる必要があります。
on open drop_items tell application "Finder" set dropNum to count drop_items repeat with i from 1 to dropNum set Obj to item i of drop_items set comment of Obj to modification date of Obj end repeat end tell end openこれでちゃんと動くようになります。ただし、できるならもうちょっと手を加えておきたいところです。
2.修正日の属性は文字列ではないことを考慮する。
とりあえず、現段階でも問題はありませんが、場合によっては日付のフォーマットは文字列に変換しないとうまく動かないことがあります。
on open drop_items tell application "Finder" set dropNum to count drop_items repeat with i from 1 to dropNum set Obj to item i of drop_items set comData to modification date of Obj set comment of Obj to comment of Obj & (comData as text) end repeat end tell end openこれで、日付は文字列として扱われるようになります。これなら、文句なしのスクリプトです。
もし、もうちょっとスクリプトに詳しい人なら、更にスクリプトをまとめてしまうでしょう。
on open drop_items tell application "Finder" repeat with Obj in drop_items set comData to modification date of Obj set comment of Obj to comment of Obj & (comData as text) end repeat end tell end openここでは、繰り返し部分で見慣れないものを利用しています。「repeat with 〜 in 〜」というものですね。これは、リストの各項目にすべて同じ処理をする場合に使われる特別な繰り返しです。
repeat with《変数》in {《リストの値》} …… 命令を書く …… end repeatこんな形をしています。こうすると、リストの各項目を《変数》に順番に収めて実行してくれるのです。ドラッグ&ドロップのように、リストで値を得ることが多いFinderの操作では、多用される繰り返しです。
…まあ、こんな感じでスクリプトは書かれていきます。Finderのスクリプトでエラーが起きたら、次の点があやしいと思ってください。
1.リストの処理は完璧か?
2.オブジェクトはきちんと参照されているか?
3.型の異なるものを操作していないか?
これが、エラーの3大要素なのです(あ、シンタックスエラーは、それ以前の問題ですが…)。