Applescriptでコーディングされたアプリケーションにフォルダをドロップするときに、サブフォルダの親フォルダのパスを取得したい
したがって、デスクトップ上にある「Test1」というフォルダをドロップすると、
スクリプトで「Test1」の親パスとして「/ Users/username/Desktop /」を指定したいと思います。これは私のコードです:
on open the_dropped_folder
tell application "Finder"
set FolderPath to the_dropped_folder
set ParentPath to container of FolderPath
set thepath to POSIX path of ParentPath
end tell
end open
これはスローされ、次のようにエラーが発生します。
"{エイリアス" Mac HD:Users:username:Desktop:Test1: "}のクラスctnrを取得できません
どうすればこれを達成できるか考えていますか?
open
handler のパラメータは、alias
オブジェクトのlistを取得します1。エラーメッセージの中括弧({}
)は、リストオブジェクトを操作しようとしたときにエラーが発生したことを示します。
したがって、リストの代わりに単一のアイテムを操作するには、set FolderPath to first item of the_dropped_folder
のようなものを使用する必要があります(そして、「読みやすく」なるように、パラメーターに複数の名前を付ける必要があります)。これで、set ParentPath to container of FolderPath
ステートメントが正しく機能するはずです。
ただし、次のステートメントはおそらく失敗します。 ParentPath
は、Finderfolder
オブジェクトであり、POSIX path
プロパティはありません。通常、この問題を回避する最も簡単な方法は、Finderにそのitem
オブジェクトを変換させることです(folder
はitem
のサブクラスです) alias
オブジェクトに挿入し、そのPOSIX path
を抽出します(alias
オブジェクトにはPOSIX path
プロパティがあります)。
これらすべてをまとめると、次のような結果になる可能性があります。
on open someDroppedAliases
set theAlias to first item of someDroppedAliases
tell application "Finder"
set parentFolder to container of theAlias
set parentFolderAlias to parentFolder as alias
end tell
set parentFolderPath to POSIX path of parentFolderAlias
display dialog "Path of container:" default answer parentFolderPath
end open
すべての中間変数なし:
on open someDroppedAliases
tell application "Finder" to ¬
set parentFolderPath to POSIX path of ¬
(container of first item of someDroppedAliases as alias)
display dialog "Path of container:" default answer parentFolderPath
end open
または、システムイベント(item
オブジェクトには実際にはPOSIX path
プロパティがあります):
on open someDroppedAliases
tell application "System Events" to ¬
set parentFolderPath to POSIX path of ¬
container of first item of someDroppedAliases
display dialog "Path of container:" default answer parentFolderPath
end open
注:私のバージョン(または元の定式化)には、フォルダーの処理に固有のものはありません。同じプログラムがドロップされたファイルを処理し、そのコンテナを生成します。
1 技術的には、SnowLeopardの«class bmrk»
オブジェクトであり、ほとんどの場合、適切なalias
オブジェクトのように機能します(ただし、実際のalias
オブジェクトとは いくつかの違い )。
これは別の便利な例です(私のような若いプレーヤーによくある罠のように見えるものを説明するために上記を要約しました。括弧が重要であることに気づいていませんでした)。
TmpItemがドロップレットにドロップされたファイルであるとしましょう。あなたはアプリケーション「ファインダー」に...
宛先をtmpItemのPOSIXパスに設定します-これは機能します
宛先をtmpItemのコンテナのPOSIXパスに設定します-これは失敗します
宛先をtmpItemのコンテナのPOSIXパスにエイリアスとして設定します-これは失敗します
宛先を(エイリアスとしてのtmpItemのコンテナ)のPOSIXパスに設定します-これは成功します