9

Finder から現在のディレクトリを読み取り、その上でシェル コマンドを実行することになっている AppleScript を作成しようとしました。Finder で目的のフォルダーに移動し、AppleScript エディターからスクリプトを実行すると機能しますが、スクリプトを保存して Finder ツールバーにドラッグすると、currentDir がスクリプト ファイルのフォルダー (ユーザー ディレクトリ) に設定されます。これが私のスクリプトです:

tell application "Finder"
    set currentDir to POSIX path of ((container of (path to me)) as text)
end tell
tell application "Terminal"
    do script "cd " & currentDir
    do script "<operation goes here>"
end tell

ツールバーのショートカットを使用する場合、ディレクトリをアクティブにするにはどうすればよいですか? 次に、ターミナル ウィンドウを開かずに (表示せずに) バックグラウンドでシェル コマンドを実行する方法はありますか?

4

2 に答える 2

14

以下に 2 つの解決策を示します。

1- 現在のフォルダが前面の Finder ウィンドウのターゲットである場合:

tell application "Finder" to set currentDir to (target of front Finder window) as text
do shell script "cd " & (quoted form of POSIX path of currentDir) & "; <operation goes here>"

--

2 - 現在のフォルダーが選択されたフォルダーの場合、ウィンドウ内のサブフォルダーを選択できるため (ウィンドウのターゲットは変更されません)、ウィンドウのターゲットに対して(リスト ビューまたはカバーフロー) 異なります。 :

tell application "Finder"
    set sel to item 1 of (get selection)
    if class of sel is folder then
        set currentDir to sel as text
    else
        set currentDir to (container of sel) as text
    end if
end tell
do shell script "cd " & (quoted form of POSIX path of currentDir) & "; <operation goes here>"
于 2012-08-26T13:28:53.887 に答える
7

insertion location前面の Finder ウィンドウまたはデスクトップのタイトル バーに表示されるフォルダです。

tell application "Finder" to POSIX path of (insertion location as alias)

ウィンドウにはfolder、タイトル バーに表示されるフォルダーの属性があります。

tell application "Finder" to POSIX path of ((folder of window 1) as alias)

10.7 と 10.8 には未解決のバグがあり、両方 (およびselectionプロパティ) が古い値を参照することがあります。

これにより、現在のフォルダーがリスト ビューでの選択に依存するようになります。

tell application "Finder"
    if current view of window 1 is in {list view, flow view} and selection is not {} then
        set i to item 1 of (get selection)
        if class of i is folder then
            set p to i
        else
            set p to container of i
        end if
    else
        set p to folder of window 1
    end if
    POSIX path of (p as alias)
end tell
于 2012-08-26T19:00:08.730 に答える