2

この非常に基本的な AppleScript を Mac で実行して、iTunes のすべての曲から評価を削除しようとしています。

tell application "iTunes"
    set sel to every track in library playlist
    repeat with i from 1 to the count of sel
        set rating of track i in sel to 0
    end repeat
end tell

私はこれまで AppleScript で何も書いたことがありませんでしたが、試してみようと思いました (非常に直感的であるはずなので)。残念ながら、スクリプトを実行しようとすると、次のエラーが表示されます。

error "Can’t get every track of library playlist." number -1728 
from every «class cTrk» of «class cLiP»

このエラーは何ですか? iTunes でトラックを選択する別の方法はありますか? 助けてくれてありがとう。

4

2 に答える 2

2

理由はよくわかりませんが、ライブラリのプレイリストには実際にはトラックが含まれていないからです。奇妙なことですが、これをすべてのトラックで実行したいだけなので、さらに簡単な解決策があります。ではなくevery track of library、単に使用しevery trackます。これにより、アプリケーション内の文字通りすべてのトラックが取得されます。これが、あなたがやろうとしていることです。そして、他のいくつかの単純化により、これは次のようになります

tell application "iTunes" to set the rating of every track to 0

構文は通常のブロックtell application "iTunes" to ...と同じですが、tell長さは 1 ステートメントのみで、. は必要ありませんend tellsetまた、リスト内のすべてのエントリに対して一度にコマンドを自動的に実行できるため、必要なのはそれだけです。一般に、インデックスを介して列挙する必要はほとんどありません。たとえば、ソリューションに近いものについては、同等のものがあります

tell application "iTunes"
  repeat with t in every track
    set the rating of t to 0
  end repeat
end tell

これにより、インデックス作成が回避され、おそらく高速になります(ただし、違いがある場合は、ワンライナーがおそらく最速になります)。

于 2011-01-07T00:37:40.817 に答える
1

あなたは誤解されています: AppleScript はあまり直感的ではありません。主な理由は、観察される動作の多くが各アプリケーションのオブジェクト モデルの実装によって決定されるためです。非常に強力な場合もありますが、特定のアプリケーションで機能する適切な呪文が見つかるまで、多くの場合実験する必要があります.

この場合、プレイリストの最初のアイテムを選択する必要があります。違いに注意してください。

get library playlist
    Result:
        library playlist  -- the class
get library playlists
    Result:
        {library playlist id 51776 of source id 67 of application "iTunes"} -- a list
get first library playlist
    Result:
        library playlist id 51776 of source id 67 of application "iTunes" -- first item

しかし、おそらくやりたいことは、次のようなものです。

tell application "iTunes"
    repeat with tr in every track in first Library playlist
        set rating of tr to 60  -- values are 0 to 100
    end repeat
end tell

大きなライブラリがある場合は、最初に小さなプレイリストで実験することをお勧めします。たとえば、テスト プレイリストでトラックを選択してからin current playlistrepeatステートメントで置き換えます。

于 2011-01-07T00:39:38.803 に答える