我正在尝试将我的iTunes的所有歌曲名称写入txt文档。我遇到的第一个问题是我似乎无法正确循环操作。以下是我的iTunes中前15首歌曲的测试用例:
tell application "TextEdit"
make new document
end tell
tell application "iTunes"
set trNameID1 to name of track 1
set trNameID2 to name of track 2
set trNameID3 to name of track 3
set trNameID4 to name of track 4
set trNameID5 to name of track 5
set trNameID6 to name of track 6
set trNameID7 to name of track 7
set trNameID8 to name of track 8
set trNameID9 to name of track 9
set trNameID10 to name of track 10
set trNameID11 to name of track 11
set trNameID12 to name of track 12
set trNameID13 to name of track 13
set trNameID14 to name of track 14
set trNameID15 to name of track 15
tell application "TextEdit"
set text of document 1 to {trNameID1 & "
", trNameID2 & "
", trNameID3 & "
", trNameID4 & "
", trNameID5 & "
", trNameID6 & "
", trNameID7 & "
", trNameID8 & "
", trNameID9 & "
", trNameID10 & "
", trNameID11 & "
", trNameID12 & "
", trNameID13 & "
", trNameID14 & "
", trNameID15} as text
end tell
end tell
当我尝试循环播放时,txt文档只包含最后一首歌曲名称,例如:
tell application "TextEdit"
make new document
end tell
tell application "iTunes"
set trNum to 1
repeat 15 times
set trNameID to name of track (trNum)
tell application "TextEdit"
set text of document 1 to trNameID & "
"
end tell
end repeat
end tell
这只会将第15首歌曲的名称输出到txt文档。
我意识到这可能是非常基本的,但我确实使用了AppleScript大约48小时,我似乎无法弄清楚这一点。我希望所有歌曲名称都在txt文档中,这样我就可以用c ++读取和分析字符串。有没有人有任何想法?
另外,我不确定在AppleScript中是否有办法查看整个iTunes资料库并查看最后一首歌曲,在iTunes中录制该歌曲的id,然后制作一个通过该ID的重复循环。通过这种方式,循环可以完全适用于库中的歌曲数量。
非常感谢任何想法!
答案 0 :(得分:2)
你根本不需要重复循环。您可以直接从iTunes获取曲目名称。您以列表格式获取它,因此我们只需将该列表转换为将列表项与返回字符分隔开的字符串。然后我们将它写入TextEdit。因此,此代码通过消除重复循环并使用applescript的文本项分隔符将列表转换为字符串以在TextEdit中使用来优化@Michele Percich的代码。
tell application "iTunes"
set trackNames to name of every track in (first playlist whose special kind is Music)
end tell
set text item delimiters to return
set trackNames to trackNames as text
set text item delimiters to ""
tell application "TextEdit"
make new document
set text of document 1 to trackNames
end tell
答案 1 :(得分:1)
您需要在重复循环结束时增加trNum
变量的值:
set trNum to trNum + 1
或者更好地使用不同的repeat
语法:
repeat with trNum from 1 to 15
还要将曲目名称添加(而不是替换)到文档:
set text of document 1 to text of document 1 & trNameID & return
然而,这可能是一种更好的方式来做你想做的事情:
tell application "iTunes"
set trackList to ""
set allTracks to every track in (first playlist whose special kind is Music)
repeat with currentTrack in allTracks
set trNameID to name of currentTrack
set trackList to trackList & trNameID & return
end repeat
end tell
tell application "TextEdit"
make new document
set text of document 1 to trackList
end tell
答案 2 :(得分:0)
我看到你们都使用了:
告诉应用程序“TextEdit”
制作新文件
将文档1的文本设置为trackNames
告诉
命令 您可以使用更快的方式:
将textlocation设置为“/users/yourusername/desktop/test.txt”
将Line_1设置为“Hello这是第一行,如果你想要更多行只是复制>这个脚本并更改变量。”
做shell脚本“echo”&引用的形式为Line_1& “>>”&引用形式的文本位置
您可以在脚本中看到2“>>”这将在txt文件中的新行中添加每个文本行。 如果只有一个“>”文本将替换其他文本。
以下是一个例子:
首先使用2“>>”线
做shell脚本“回声嘿这是一行。>> /Users/Yourusername/desktop/Add.txt”
做shell脚本“echo这是第二个。>> /Users/Yourusername/desktop/Add.txt”
此脚本将生成如下的txt文件:
嘿,这是一行。
这是第二个。
现在有2“>”线
做shell脚本“回声嘿这是一行> /Users/Zl109819/desktop/Add.txt”
做shell脚本“echo这是第二个> /Users/Zl109819/desktop/Add.txt”
此脚本将生成如下的txt文件:
这是第二个。