追記
困ったことに、OS Xでは以下で説明するスクリプトの多くが動きません。そのため、まことに残念ながら、現在は事実上使えない形式となっています。
複数参照というのは、Appleので正式な用語では無いのですが、要は「参照のリスト」です。
tell application "Finder" {folder 1 of disk 1, folder 3 of disk 1, folder 4 of disk 1} end tell
複数参照をつくり出す参照形式は、全要素参照、範囲参照、フィルタ参照です。
tell application "Finder" every folder of disk 1 -- 全要素参照(folders of disk 1でもいい) folders 1 thru 3 of disk 1 -- 範囲参照 (folders whose name contains "data") of disk 1 -- フィルタ参照 end tell
selectionは、多くのアプリケーションに存在する属性で、現在選択されているオブジェクトを複数参照しています。
以下のスクリプトを実行すると、selectionが参照のリストであることがわかります。
tell application "Finder" selection -- of applicarion "Finder" end tell
リストですから、repeatを使って項目を一つずつ取り出して処理する事を思い付きます。
例えば、次のようなスクリプトです。
tell application "Finder" repeat with curItem in selection set label index of curItem to 1 end repeat end tell
ところが、リストを対象オブジェクトに指定する事で、一気に属性を変更したり命令を実行したりする事ができます。
以下のスクリプトも、先ほどのスクリプトと同じ処理をします。
tell application "Finder" set label index of selection to 1 end tell
ただし、実行速度は圧倒的に後者の方が高速です。
スクリプトも分かりやすく簡単になる上に、処理も高速ならば、これを使わない手はありません。
難点は、対応していないアプリケーションが多いことと、パスによる参照のリストには対応していない場合が多いことです。
全参照を連続して書く事で、ある階層の全てのオブジェクトを指定できます。
対応していないアプリケーションも多いので、使える場面は限られますが、とりあえずFinderが対応してますから、それだけでも使い所はあると言うものです。
次のように書くだけで、デスクトップから2階層下の全てのフォルダが指定できます。
folders of folders of disks
リストとして並べても複数参照として成り立つので、次のように書くと、デスクトップから2階層下までの全てのフォルダになります。
{disks, folders of disks, folders of folders of disks}
a reference to演算子を使って参照渡しをすれば、渡した先で も複数参照として処理できるわけなんで、次のようにフォルダに含まれる全てのフォルダについての処理も簡単に可能になります。
tell application "Finder" activate set theFolder to choose folder repeat set theFolder to a reference to (folders of theFolder) if contents of theFolder = {} then exit repeat open theFolder -- ここで色々な処理を end repeat end tell
再帰呼び出しを使うより簡単です。