我是applecript的新手。我试图从各种来源学习它,例如Doug's site,macscripter和此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,
鲍勃
答案 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"