我正在尝试将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
这只会将第十五首歌曲的名称输出到txt文档中。
我意识到这可能是非常基本的,但我已经用了大约48个小时的applescript了,我似乎无法理解这一点。我希望所有的歌曲名称都在一个txt文档中,这样我就可以在c++中读取和分析字符串。有人有什么想法吗?
此外,我不确定在AppleScript中是否有办法查看整个iTunes库并查看最后一首歌曲,在iTunes中记录该歌曲的id,然后通过该id进行重复循环。这样,循环将适用于库中的歌曲数量。
任何想法都将不胜感激!
您根本不需要重复循环。您可以直接从iTunes获取曲目名称。您可以得到列表格式的列表,所以我们只需将该列表转换为一个字符串,用返回字符分隔列表项。然后我们将其写入TextEdit。因此,这段代码通过消除重复循环并使用appescript的文本项分隔符将列表转换为字符串以用于TextEdit来优化@Michele Perich的代码。
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
您需要在重复循环结束时增加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
我看到你们都在使用:
告诉应用程序"TextEdit"
制作新文档
将文档1的文本设置为trackNames
结束通知
命令你可以使用一种更快的方式:
将textlocation设置为"/users/yourusername/desktop/test.txt"
将Line_1设置为"你好,这是第一行,如果你想要更多的行,只需复制>这个脚本并更改变量。"
do shell脚本"echo"&Line_1&">>"&文本定位的报价形式
您可以在脚本中看到2个">>"符号,这将在txt文件的新行中添加每一个文本行。如果只有一个">",则文本将替换其他文本。
这里有一个例子:
首先使用2">>"行
执行shell脚本"echo嘿,这是一行。>>/Users/Yourusername/desktop/Add.txt"
do shell script"echo这是第二个。>>/Users/Yourusername/desktop/Add.txt"
这个脚本将生成一个如下的txt文件:
嘿,这是一行。
这是第二个。
现在有2">"行
执行shell脚本"echo嘿,这是一行>/Users/Zl109819/desktop/Add.txt"
do shell脚本"echo这是第二个>/Users/Zl109819/desktop/Add.txt"
这个脚本将生成一个如下的txt文件:
这是第二个。