从文件名的文本列表生成 iTunes 播放列表

Generate iTunes playlist from text list of filenames

我有一个文件名的文本列表,所有文件都位于一个文件夹 Tardy's Music 中的不同文件夹中。

我没有完整的 POSIX 路径,只有文件名(例如“01 Song Title.mp3”)。

有没有办法创建一个 AppleScript,它可以在 Tardy 的音乐中搜索每个文件名并将其添加到播放列表 'Best Of'?

我可以从 iTunes 中看到的歌曲名称生成播放列表,但不是文件名。

我有文本文件中的标题,但如果有帮助,可以将它们放入 csv 文件中。

(另外,这些文件都已经在我的 iTunes 资料库中了。)

你没有提到你 运行 的 MacOS 和 iTunes 版本,所以我提供下面的脚本作为一种方法的示例您的 objective 可以满足,前提是它已经在 MacOS 10.13 上使用 iTunes 12.7.

进行了松散测试

"loosely",我的意思是我在理想条件下 运行 脚本几次,我向它提供了一个我知道存在的 mp3 文件名列表;是独一无二的;并且已经添加到我的主要 iTunes 库中。也就是说,non-existence、non-uniqueness 和文件 not 已经添加到您的 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"}

在使用此脚本之前,您需要更改前两个变量 SongTitlesFileMusicFolder 的值。输入 完整 路径(即 /Users/%you%/... 而不是 ~/...) 属于:

① 包含歌曲名称列表的文件。我假设该文件是纯文本文档,其中每个文件名占一行。文件名前后的空格不应影响结果,但理想的格式应如下所示:

01 A Song I Like.mp3
04 Second Song.m4a
Song 3.mp3
I Love This Song.mp3
 

在末尾留一个空行,如此处所示,否则列表中的最后一首歌曲可能会被搜索遗漏。搜索 不是 case-sensitive,但在其他方面是准确的,因为要进行匹配,需要完整的文件名(包括扩展名)。

这些是我在创建脚本时确定的标准。如果需要,可以使用不同的标准和匹配严格度,但鉴于您的摘要中的描述,这似乎没有必要。

如果您需要文件采用不同的格式,请告诉我,我可以尝试 re-work 脚本来满足它。

② 包含您的音乐的 top-level 文件夹,这些文件可以在其中找到(某处),即 Tardy's Music.[=17= 的完整路径]

我的脚本使用 shell 命令 find 的帮助来定位文件。它读取文本文件的每一行并搜索具有该名称的文件,returning 其完整路径。它只会 return 个文件,而不是文件夹,并使用 in 敏感名称匹配。

如果存在多个具有相同文件名的文件(但位于不同位置),两首歌曲都将被 return 编辑并添加到最终列表中。

如果未找到匹配项,脚本将终止并显示一条消息,该消息将显示在 脚本编辑器.

的结果 window 中

随后的 repeat 循环获取文件路径列表并将它们从 Posix 路径(即 /Paths/That Look Like/This.mp3)转换为 alias iTunes 可以使用的类型。

最后,脚本指示 iTunes 创建一个名为 "Best Of" 的播放列表,并将歌曲添加到其中。

如果文件已经导入到您的媒体库中,它们将不会再次导入(谢天谢地),而只会被添加到播放列表中;如果文件尚未导入到您的库中,在 loose 测试中,文件将导入并添加到您的库中,并添加到播放列表中。

告诉我你的情况。如果您有任何疑问,请发表评论,我会尽快回复您。