Finder上で一つ、もしくは複数のフォルダを選択しているとします。
そして別のフォルダ(fdir)に同じ名前のフォルダがあるかどうか存在確認し、trueかfalseかで条件分岐したいです。
別フォルダに同じ名前のフォルダがあったらその名前をアラートで出したいのですが、複数のフォルダを選んでいても返ってくるのは一つだけでした。
tell application "Finder" activate set select_list to selection set fdir to choose folder with prompt "フォルダを選択" repeat with f in select_list set fname_ext to f's name set folEx to get (exists of folder fname_ext) of fdir if folEx = true then display alert fname_ext else display alert "存在していません" end if end repeat end tell
どこがおかしいでしょうか。
AppleScriptは初心者なので分かりづらいかもしれませんが、よろしくお願いいたします。
> 複数のフォルダを選んでいても返ってくるのは一つだけでした。
macOS Monterey バージョン12.4
で再現確認してみたのですが、
最初に2つのフォルダを選択した状態でスクリプトを実行すると
2回「存在していません」のメッセージが表示されました。
*存在するフォルダを選択したはずなのですが。。
存在するかしないかのチェックが正しく動いていないという問題でしょうか?
大変申し訳ありません。
実はこのスクリプトを会社のパソコン Catalina(バージョンを忘れてしまいました)でやった時、複数のフォルダを選択した状態で実行したのに一つ目の存在するフォルダ名だけメッセージで表示されたんです。
しかし、先ほど家のパソコン Big Sur バージョン 11.2で実行してみたところ、ちゃんと選択したフォルダ名が全て表示されました。
しかしxg63ex2bさんのOSではまた違う挙動なんですね。。
私の家のMacでは一応思い通りの挙動になったのでなんとも言えないのですが・・・
実際xg63ex2bさんのMacでは存在するかしないかのチェックが正しく動いていないので、それも問題ですし、会社のMacでは存在していた場合にそのフォルダ名が全て表示されないので、それも問題なんです。
ちょっとOSによって挙動が違うというのは想像していなかったので、混乱させてしまいました。
全てのOSでこのスクリプトを動かすにはどうすればよいのでしょうか。
何かが間違っているのだと思います。
コメントありがとうございます。
そうだったのですね。
AppleScriptは随分前からあるみたいですので、
成熟していて、バージョンによる違いなんてないのかと思ってしまっていましたが、
かなり違いがありそうですね。。
> | AppleScript version | macOS version | useコマンド記述 |
> |:--|:--|:--|
> | 2.7 | 10.13, 10.14 , 10.15, 11.0 | use AppleScript version "2.7" |
> | 2.8 | 12.0 | use AppleScript version "2.8" |
>
> https://ja.wikipedia.org/wiki/AppleScript#異なるOSバージョン間の互換性
Wikiを見ると、CatalinaとBig Surは同じAppleScriptのバージョンみたいですが、
Montereyはまた別のバージョンになるみたいですね。
> AppleScriptは中間コードに翻訳されて逐次実行されるが、以下のようなさまざまな保存・実行環境(ランタイム環境)を持つため、実行環境によって動作が微妙に異なり、想定していた通りに動かない場合がある。
> https://ja.wikipedia.org/wiki/AppleScript#さまざまな実行環境
実行環境による違いもあるみたいですが、
どのような形で実行されましたでしょうか?
私はスクリプトエディタから実行していました。
*私自身、AppleScriptを初めて使ってみたのであまりお力になれないかもしれません
*AppleScriptの回答をしてくれる人があまりいなそうでしたのでコメントしてしまいました。。ごめんなさい。
ありがとうございます。
私もあまりAppleScriptに詳しくないし調べてもいなくて、こんなに厄介なものだと思っていなかったです(汗)わざわざ調べたりしてくださったりして感謝です。
私自身も、スクリプトエディタに上記のコードを入れて、複数のフォルダを選択した状態で再生マークを押すという感じで実行しています。多分やり方は一緒だと思うんですが・・・
詳しい人のコメントも待ってみますが、
自力で調べて色々試してみようと思います!
会社のMacで再度同じコードで実行してみたら、家のMacと同じ挙動になりました。何故前回はうまく動作しなかったのかは不明ですが、とりあえず会社のMacで思い通りに動くことが判明したので解決済みにしておきます。
Montereyに関してはまだアップデートの予定はないのでMontereyでの検証は出来ないのですが、違う環境だと動作が異なることがあると教えてくださったxg63ex2bに感謝いたします。
ありがとうございました。
回答1件
あなたの回答
tips
プレビュー