AppleScriptでエイリアス(リスト)を参照できない

アップルスクリプトのバグかもしれないのですが、教えていただけないでしょうか。
以下のような階層のフォルダがあり、この中に入っている3つ(全て)のファイルを取り出しファイル名をいじるためのスクリプトを考えています。
TEST
 ┃
 ┣月曜┬一限
 ┃  ├二限─田中.xls
 ┃  └三限
 ┃
 ┣火曜┬一限─鈴木.xls
 ┃  ├二限
 ┃  └三限
 ┃
 ┗水曜┬一限
    ├二限
    └三限─佐藤.xls
set theFolder to (choose folder with prompt "chooooose!")
--フォルダを選びます。
tell application "Finder"
set file_List to every file of every folder of every folder of theFolder
repeat with aFile in file_List
display dialog name of aFile as string
end repeat
end tell
このコードで実験すると、file_List の item 1 をstringに変換できないと出ます。
さらに奇妙なことに、一つ目のファイルの場所は、
TEST:月曜:2限:のはずですが、file_Listの中身を表示させると
そのファイルの場所は、「"田中.xls" of folder "TEST" of folder "Documents"............」とTESTフォルダの直下に田中ファイルがあるという形で表示されいるのです。
このコードをOS9.2.2で実行すると問題なく、ダイアログボックスが表示され、ファイル名が表示されていきます。
これと同じ事をOSXで実現することは今のところ出来ないのでしょうか?どなたか、お知恵をお貸し頂ければと思います。

投稿日 2002/02/21 21:48

返信: 3

2002/02/22 21:53 Community User への返信

この書き方だとfile_list の各アイテムの型が
どのアプリケーションのクラスなのかが不明確ですね。
every fileなんてすると、AppleScriptのfileとも、
Finderのファイルリストともどちらにも解釈できてしまいます。
alias型に限定させれば問題は発生しないはず。
というわけで、こんな感じでどうでしょう?
---
tell application "Finder"
activate
set foldA to (choose folder)
set filesInFoldA to (files in folders in foldA) as alias list --of application "Finder"

set strJoined to ""
repeat with i in filesInFoldA
set strJoined to (i as string) & return & strJoined
end repeat
display dialog strJoined
end tell
--
ダイアログが何度も出ると面倒なので、
パスを文字列strJoinedとして連結していますが、
結果としては正しいパスでファイル(alias型)の取得に成功しています。
StandardAdditions.osaxのlist folder命令を使っても
aliasのリストを得ることが可能であるので、
as stringしてends with ":"なaliasのリストに絞り込みし、
does not end with ":"なaliasのリストを取得と言う形をとれば、
Finderを経由させずに高速処理させることもできることでしょう。
do shell scriptでワイルドカードを使うと言う手もありですね

2002/02/22 23:12 Community User への返信

できました!ありがとうございます。
なるほど、リストを取得する時に、型を指定してやればよかったのですね。かなり調べたつもりだったのですが、こんなところに盲点があったとは。
これで、考えていた事が何とか実現できそうな気がしてきました。
ホントにありがとうございます。

2002/02/23 00:30 Community User への返信

全部のファイルという単語を思い出せなくて書かなかったんですけど、
「set filesInFoldA to (files of entire contents in foldA) as alias list」
と、した方が、
階層が深かったり、「あ:か:さ:た」と「あ:き:し」みたいな、
深さの異なる階層にファイルが存在する可能性がある場合には
files of folders of folders of targetFolderみたいな
面倒な記述をする必要が無くなるので都合が良いでしょう。
あとはフォルダのエイリアスやシンボリックリンクが
あった場合の処理をどうするかを組めば、
後々十分に再利用できるスクリプトになりますね。
 
ちなみに、「as alias list」という表現は
Finderでしか使えないものです。
iDiskに接続中だとか、Finderが動けない状態になっていると
スクリプトも巻き添えを食らうことになるので
あまり良い書き方とは言えません。

このスレッドはシステム、またはAppleコミュニティチームによってロックされました。 問題解決の参考になる情報であれば、どの投稿にでも投票いただけます。またコミュニティで他の回答を検索することもできます。

AppleScriptでエイリアス(リスト)を参照できない

Apple サポートコミュニティへようこそ
Apple ユーザ同士でお使いの製品について助け合うフォーラムです。Apple Account を使ってご参加ください。