2014年04月29日

AppleScriptのファイル参照、パス、などについて

趣味で、AppleScriptを書くようになって半年ほど経ちました。
やっと色々と分かって来た模様。ここらで一つ、備忘録的に、はまったところをまとめておこうと思います。
ちなみに専門家ではないので、経験的にこんなところかな、って感じで書いておりますので間違いがあるかも知れませんが、実用には問題ないかと思われます。

まずはパスとか。ファイルやフォルダを扱うときのパスで、注意する事があります。
というか、これをしっかり理解していないと所々でつまっちゃって、前に進みません。
AppleScriptでは、パス、というかファイル参照が4種類存在します。
Finder参照、エイリアス(alias)、テキストパス、POSIXパス

このうち、いわゆるパスっていうのはテキストパスとPOSIXパスだと思われます。

テキストパス
Macintosh HD:Users:Ryo:Pictures:tmp:
Photo:workspace:tmp:
Macintosh HD:Users:Ryo:Pictures:tmp:mypicture.jpg


POSIXパス
/Users/Ryo/Pictures/tmp/
/Volumes/Photo/workspace/tmp/
/Users/Ryo/Pictures/tmp/mypicture.jpg

具体的にはこんな感じ。
要はUnix的なパスの指定はPOSIXパス。それをMac的に書くとテキストパス。
上段はOSの入ってるHDD内のtmpというフォルダのパス。中段はPhotoという名前の外付けHDD内にあるtmpというフォルダのパス。
フォルダの区切りが ”:” か “/“ かの違いとルート(最初のフォルダ)の表現が違います。
下段はフォルダではなく、ファイルのパス。最後に ":" とか "/" とか付きません。

普通にスクリプト内でテキストとして扱う場合はテキストパスを使います。パスからフォルダ名を取得したり、新たにフォルダを追加するためにパスに文字列を付け加えたりする時。
で、POSIXパスはスクリプト内でシェルスクリプトなどのUnixコマンドを使いたいとき、Mac的なテキストパスの指定では受け付けてくれない時があるので、そういう場合はPOSIXパスを使います。

エイリアス(alias)はパス、というよりは機能、って感じかと思います。
スクリプト内でパスとしてエイリアスを指定しておくと、そのフォルダやファイルを移動しても、自動で追いかけてくれるというものです。
詳しくは分かりません。が、確かにゴミ箱に移動してもパスとして通ります。
エイリアスはテキストではありません。
例えば、

set textPath to "Photo:workspace:tmp:"

set newPath to textPath & "newfolder:"


などどすると、

"Photo:workspace:tmp:newfolder:"

と、文字列“Photo:workspace:tmp:”の後に、文字列“newfolder:”を結合した値が返ってきますが、

set textPath to "Photo:workspace:tmp:"

set theAlias to textPath as alias

set newPath to theAlias & "newfolder:"


と、textPathをエイリアスに変換してから文字列を足そうとしても、

{alias "Photo:workspace:tmp:", "newfolder:"}

と、変なリストで返ってきます。一つ目がエイリアスで、二つ目が文字列、みたいな。

なので、文字列として扱う場合はエイリアスのままでは使えないので、

set textPath to theAlias as text


などとして、テキストパス(というかただのテキスト)にして扱うようにします。

最後にFinder参照。
これはFinderの中でのファイル参照って事だと思います。
tell application “Finder” などとFinder経由でパスを取得しようとすると、

{folder "tmp" of folder "Pictures" of folder "Ryo" of folder "Users" of startup disk of application "Finder"}

みたいな値が返ってきます。
これも当然テキストではないので、テキストとして扱いたい場合は、

set textPath to abc as text --(変数abcにFinder参照が入ってるとします)

みたいな感じでテキストに変換します。
ちなみに上のFinder参照をテキストパスに変換すると、

Macintosh HD:Users:Ryo:Pictures:tmp:

です。

始めはこの4つがなにがなにやら分からず苦労しましたが、分かればなんて事ないですね。
実際にはスクリプト内でこの4つを相互に変換しながら使っていきます。
というか、AppleScriptでファイル参照を取得しようとすると、Finder参照かエイリアスで取得されるので、それをテキストパスやPOSIXパスに変換して処理していく、って感じですかね。

****まとめ****
エイリアス ---テキストパス、POSIXパスに変換可
alias "Macintosh HD:Users:Ryo:Pictures:tmp:"

テキストパス ---エイリアス、POSIXパスに変換可
Macintosh HD:Users:Ryo:Pictures:tmp:

POSIXパス ---テキストパスに変換可。エイリアスには変換できない。
/Users/Ryo/Pictures/tmp/

Finder参照 ---エイリアス、テキストパスに変換可。POSIXパスには変換できない。
{folder "tmp" of folder "Pictures" of folder "Ryo" of folder "Users" of startup disk of application "Finder"}
posted by Ryo Yamashita at 17:51| Comment(0) | AppleScript
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: