追加した各アイテムでスクリプトを実行する監視フォルダーを設定する必要があります。ただし、1つのアイテムを処理するのに10分以上かかる可能性があります。
私がやったことは、このコードをスクリプトの先頭に置き、フォルダーを監視し続け、何かが追加されたときに動作するようにすることです:
set watchFolderAlias to (POSIX file watchFolder as alias)
set r to {}
repeat
tell application "Finder" to set r to ¬
(sort (get files of watchFolderAlias whose kind is "alias") ¬
by creation date)
if (count of r) ≠ 0 then
do(first item of r as alias)
end if
delay 5
end repeat
on do(x)
(* do 10 minutes of stuff with x *)
end do
...そして、それを実行し続けます。しかし、これは面倒で厄介です。
しかし、もしdo()
ものをフォルダアクションとしてアタッチすると、アイテムが追加されるとすぐに新しいインスタンスが起動します...
よりエレガントなソリューションがありませんか?
(明確にするために:フォルダーアクションスクリプトをフォルダーにアタッチすると、そのスクリプトは別のインスタンスが既に実行されているかどうかに関係なく、フォルダーに項目を追加するたびに1回、複数回起動されます。たとえば、10個のアイテムが監視フォルダーにドロップされ、最初の10個のアイテムがまだ処理されている間に別の5個のアイテムがドロップされると、スクリプトの2番目のインスタンスが起動します。
私が思いつくことができる他の唯一のことは、スクリプトによって「ビジー」に設定される「ステータス」ファイルを維持し、処理が完了すると「アイドル」になり、スクリプトの他のインスタンスが「アイドル」状態...しかし、これも厄介です。