使用AppleScript选择iTunes中的所有曲目

时间:2011-01-06 23:06:31

标签: macos applescript itunes rating

我有这个非常基本的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中选择曲目的方法?谢谢你的帮助。

2 个答案:

答案 0 :(得分:2)

我不完全知道原因,但答案是图书馆播放列表实际上并不包含曲目。奇怪,我知道,但是因为你只想在每条轨道上运行它,所以有一个更简单的解决方案。而不是every track of library,只需使用every track;这将完全取决于应用程序中的每个轨道,这就是您要做的事情。通过一些其他简化,这就变成了

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

tell application "iTunes" to ...语法就像普通的tell块一样,但它只有一个语句,并且不会使用end tell。并且您可以立即自动对列表中的每个条目运行set命令,这就是您所需要的一切。通常,您很少需要通过索引枚举;例如,对于更接近您的解决方案的东西,有相同的

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

这可以避免索引,并且也可能更快(尽管单行可能会更快,如果存在差异)。

答案 1 :(得分: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 playlist语句中替换repeat