【问题标题】:Applescript - How to iterate over tracksApplescript - 如何迭代轨道
【发布时间】:2011-02-14 20:48:19
【问题描述】:

我是 applescript 的新手。我试图从各种来源学习它,例如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,

鲍勃

【问题讨论】:

    标签: applescript itunes


    【解决方案1】:

    您的代码很好;似乎什么也没发生的原因是 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 秒,分别。

    【讨论】:

      【解决方案2】:

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

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

      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
      

      所以它起作用了,你只需要在循环结束之前做你想做的事。

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

      希望这会有所帮助!

      【讨论】:

        【解决方案3】:

        只是想补充一点,这些类型的 AppleScript 脚本仍然可以在 MacOS Catalina 上运行,但是由于 iTunes 已重命名为“音乐”,因此您必须将 tell application "iTunes" 更改为 tell application "Music"

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-08
          • 2023-04-09
          • 1970-01-01
          • 2011-06-01
          • 2011-05-08
          • 1970-01-01
          相关资源
          最近更新 更多