2017-01-27 12 views
1

Finderで選択されているファイルの完全なパスを取得しようとしています。この時点で、私は多くの方法を試してみました:これらのコマンドのFinderで選択されたファイルのposixパスを取得するにはどうすればよいですか?

>> Application('Finder').selection()[0] 
=> Application("Finder").startupDisk.folders.byName("Users").folders.byName("example").folders.byName("Tools").folders.byName("my-tools").documentFiles.byName("example.sh") 
>> 
>> Application('Finder').selection()[0].name() 
=> "example.sh" 
>> 
>> Application('Finder').selection()[0].toString() 
=> "[object ObjectSpecifier]" 
>> 
>> Application('Finder').selection()[0].posixPath() 
!! Error on line 1: Error: Can't get object. 
>> 
>> Application('Finder').selection()[0].path() 
!! Error on line 1: Error: Can't get object. 
>> 
>> Application('Finder').selection()[0].url() 
=> "file:///Users/example/Tools/my-tools/example.sh" 
>> 
>> Path(Application('Finder').selection()[0]) 
!! Error on line 1: Error: Can't get object. 
>> 
>> Path(Application('Finder').selection()[0]).toString() 
!! Error on line 1: Error: Can't get object. 

なし/Users/example/Tools/my-tools/example.shあるPOSIXパスを取得していません。

最終的に、私は単純に、URLの前のオフfile://を取り除くことができます知っている:

>> Application('Finder').selection()[0].url().replace(/^file:\/\//, '') 
=> "/Users/example/Tools/my-tools/example.sh" 

をしかし、それはハックようだ、と直接POSIXのパスを取得するためのコマンドがあるべきように思えます。

+0

また、JXA用のAPIドキュメントがある場合は、誰かが私に指摘できたら大変感謝しています。私は[JXA Cookbook](https://github.com/dtinth/JXA-Cookbook/wiki)と[JXAリリースノート](https://developer.apple.com/library/content/releasenotes/InterapplicationCommunication /RN-JavaScriptForAutomation/Articles/OSX10-10.html)、各オブジェクト(ファイルなど)に存在するすべてのメソッドとプロパティを単に示すドキュメントは表示されません。 – stiemannkj1

+1

JXAは、AppleScriptのように、自動化可能なアプリケーションとスクリプト拡張によって提供されるAppleEvent定義を使用します。このようなライブラリのドキュメントを表示するには、Script Editorを開き、ライブラリウィンドウを表示するように設定し、関連するアプリケーションまたは拡張機能(この場合はFinder)をダブルクリックしてライブラリビューアを開きます。ドキュメントを表示する言語を選択するドロップダウンがあります。主にJXAを使用している場合は、スクリプトエディタの環境設定でその言語を標準言語として設定することもできます。 – kopischke

答えて

1

examin the file's properties()の場合は、完全パスを含む唯一のプロパティがurl()であることがわかります。ただし、特殊文字をエスケープしているとurl()プロパティを使用している場合、URLはfile://プロトコルが付いている:

>> Application('Finder').selection()[0].name() 
=> "asdf\"asdf.txt" 
>> 
>> Application('Finder').selection()[0].url() 
=> "file:///Users/example/Tools/my-tools/asdf%22asdf.txt" 

POSIXパスを取得するためには、url()unescape()との最初からfile://プロトコルを削除することができますurl()

>> unescape(Application('Finder').selection()[0].url()).replace(/^file[:]\/\//, '') 
=> "/Users/example/Tools/my-tools/asdf\"asdf.txt" 
+3

簡単に 'Path(decodeURI(Application( 'Finder')。selection()[0] .url()))'はあなたに有効なPathオブジェクトを与えます(JXAはAppleScript Aliasに相当します)。 URIのエンコーディングとデコードは、JavaScript _really_でカバーしたものであり、Pathオブジェクトは 'file://'プロトコルプレフィックスを扱えるほどスマートです。 – kopischke

関連する問題