はじめに

今回は、(なんちゃって)相対パスのようにファイル指定する方法。というのも、今までiCloudにスクリプトをおいてマシンやOSが変わっても動くようにしてたけれども、10.15からどうやらファイルの置き場所が変わるようで、絶対パスではなくて、相対パスが使えないかな〜と調べたのが始まり。

Applescriptでは相対パスは使えない

よくある、./ や ../ のようなパス指定はApplescriptでは使えない。基本は絶対パスでないといけない。ほかのApplescriptを読み込むような記述をしている場合、自分のようにiCloudみたいな場所に保存していると何らかの要因でパスがずれることがある。ではどうすればいいのだろうか・・・

ずれる部分を書き換えるしかない。

ずれるのはスクリプトの設置フォルダから上

スクリプトのフォルダパスを調べて、それを使う。path to を使ってスクリプトの場所 と その親フォルダを調べる。以下のようなスクリプトでいける


tell application "Finder"
	set ScriptPath to parent of (path to me) as text
end tell

display dialog ScriptPath


たとえば、 /HD/script/a/test.scpt のようなパスのスクリプトにこのスクリプトを走らせると、ダイアログに HD:script:a: と表示される。

で、同一のフォルダに入っている hoge.scpt を呼び出す場合は、以下のように記述すると呼び出せる。


tell application "Finder"
	set ScriptPath to parent of (path to me) as text
end tell

#同じフォルダに入っているスクリプトを呼び出す
run script file (ScriptPath & "hoge.scpt")

絶対パスだが、スクリプトフォルダ外が変わっても問題ない。もう一つ。もし、/HD/script/a/test.scpt から、別のフォルダたとえば、/HD/script/b/hoge.scpt のようなファイルを呼び出したい場合は、parent of を増やせばいい。で、ファイルパスに b: を足す。


tell application "Finder"
	set ScriptPath to parent of parent of (path to me) as text
end tell

#違うフォルダに入っているスクリプトを呼び出す
run script file (ScriptPath & "b:hoge.scpt")

割りと悩んだけれども、これでいまのところ問題ない