Applescript - 如何迭代曲目

时间:2010-05-02 22:45:22

标签: applescript itunes

我是applecript的新手。我试图从各种来源学习它,例如Doug's sitemacscripter和此forum

出于学习目的,我试图使用以下代码在屏幕上打印所有曲目名称:

tell application "iTunes"
    set myTracks to (tracks of library playlist 1)
    repeat with aTrack in myTracks
        get name of aTrack
    end repeat
end tell

但它只打印一个曲目名称,可能是最后一个......

那么,迭代列表的最佳方法是什么?

TIA,

鲍勃

3 个答案:

答案 0 :(得分:13)

你的代码很好;似乎没有任何事情发生的原因是所有get ...都会查找一个值并返回它。但是,您不对返回的值执行任何操作,因此将忽略它​​,并且只有循环的最后一次迭代才会返回任何内容。你需要在循环中做一些对外界可见的事情(任何事情):分配给变量,显示对话框等等。

如果要收集项目名称列表,可以执行以下操作:

tell application "iTunes"
  set trackNames to {}
  repeat with aTrack in tracks of library playlist 1
    set trackNames to trackNames & name of aTrack
  end repeat
end tell

但是,你可以收紧它。 AppleScript的一个强大功能就是你可以获得一个轨道的名称,你可以获得列表中每个轨道的名称并迭代它:

tell application "iTunes"
  set trackNames to {}
  repeat with aName in name of tracks of library playlist 1
    set trackNames to trackNames & aName
  end repeat
end tell

但是在这一点上,你甚至不需要循环,你可以使用更简单的

tell application "iTunes" to name of tracks of library playlist 1

作为奖励,它会更快 :在我做的快速测试中,三个版本需要16.189秒,32.656秒和 0.296秒,分别

答案 1 :(得分:4)

我认为你的答案是有效的。我相信Apple脚本编辑器列中的结果只会打印脚本的最后结果。如果您查看事件并回复,您应该会看到脚本正确返回的答案。

我尝试了自己,使用这个脚本:

tell application "iTunes"
set myTracks to (tracks of library playlist 1)

repeat with i from 1 to number of items in myTracks
    get name of item i of myTracks
end repeat

在回复中可以看到:

  • 获取文件轨道ID 4050的名称 源id的库播放列表ID 3379 41

    --> "Le deserteur"
    
  • 获取文件轨道ID 4051的名称 源id的库播放列表ID 3379 41

    --> "Le lyon est mort ce soir"
    

另外,为了确保这一点有效,你可以尝试:

 tell application "iTunes"
    set myTracks to (tracks of library playlist 1)

    repeat with i from 1 to number of items in myTracks
        display dialog name of item i of myTracks as string
    end repeat

end tell

所以它有效,你只需要在循环结束前做你想做的事。

另外,我会建议苹果官方文档:AppleScript语言指南。免费且非常完整的开始。

希望这有帮助!

答案 2 :(得分:0)

只需添加一下,这些类型的AppleScript脚本仍可在MacOS Catalina上使用,但是由于iTunes已重命名为“音乐”,因此您必须将tell application "iTunes"更改为tell application "Music"