您没有提及您正在运行的 MacOS 和 iTunes 版本,因此我提供以下脚本作为实现您目标的一种方式的示例,但前提是它已在 MacOS 10.13 上使用 iTunes 12.7 进行了松散测试。
“松散地”是指我已经在理想条件下运行了几次脚本,我向它提供了我知道存在的 mp3 文件名列表;是独一无二的;并且已经添加到我的主 iTunes 库中。也就是说,不存在、不唯一以及文件未已添加到您的 iTunes 库中应该不会造成问题。
这是脚本,之后我将引导您完成:
set SongTitlesFile to "/Users/CK/Desktop/songs.txt"
set MusicFolder to "/Users/CK/Music"
set my text item delimiters to space
set command to {¬
"while read f;", ¬
"do", ¬
"find", quoted form of the MusicFolder, ¬
"-iname \"$(printf '%q' \"$f\")\" -type f;", ¬
"done", "<", quoted form of the SongTitlesFile}
do shell script (command as text)
set SongFiles to the paragraphs of the result
if SongFiles is {} then return "No matching files found."
repeat with SongFile in the SongFiles
set end of SongFiles to POSIX file SongFile as alias
set SongFiles to the rest of SongFiles
end repeat
tell application "iTunes" to ¬
add the SongFiles to make new playlist ¬
with properties {name:"Best Of"}
在使用此脚本之前,您需要更改前两个变量SongTitlesFile 和MusicFolder 的值。输入 完整 路径(即 /Users/%you%/... 而不是 ~/...):
① 包含歌曲名称列表的文件。我假设该文件是一个纯文本文档,其中每个文件名占一行。文件名前后的空格应该不会影响结果,但理想的格式应该是这样的:
01 A Song I Like.mp3
04 Second Song.m4a
Song 3.mp3
I Love This Song.mp3
在末尾留一个空行,如此处所示,否则列表中的最后一首歌曲可能会从搜索中被忽略。搜索不区分大小写,但在其他方面是准确的,因为需要完整的文件名(包括扩展名)才能进行匹配。
这些是我在创建脚本时确定的标准。如果需要,可以使用不同的标准和匹配严格性,但鉴于您的简介中的描述,这似乎没有必要。
如果您需要文件采用不同的格式,请告诉我,我可以尝试重新编写脚本以适应它。
② 包含您的音乐的顶级文件夹,可以在其中找到这些文件(某处),即Tardy's Music 的完整路径。
我的脚本使用 shell 命令find 的帮助来定位文件。它读取文本文件的每一行并搜索具有该名称的文件,并返回其完整路径。它只会返回文件,而不是文件夹,并且使用区分大小写的in名称匹配。
如果存在多个具有相同文件名的文件(但位于不同位置),则将返回两首歌曲并将其添加到最终列表中。
如果未找到匹配项,则脚本将终止,并会在 脚本编辑器的结果窗口中显示一条消息。
随后的 repeat 循环获取文件路径列表并将它们从 Posix 路径(即 /Paths/That Look Like/This.mp3)转换为 iTunes 的 alias 类型可以用。
最后,脚本指示 iTunes 创建一个名为 “Best Of” 的播放列表,并将歌曲添加到其中。
如果文件已经导入到您的库中,它们不会再次导入(谢天谢地),只会添加到播放列表中;如果文件尚未导入您的音乐库,则在松散测试中,该文件将被导入并添加到您的音乐库中,并添加到播放列表中。
让我知道你的情况如何。如果您有任何疑问,请发表评论,我会尽快回复您。