首页 > 解决方案 > 如果字符串包含括号(AppleScript),如何将双 \ 添加到字符串

问题描述

我编写了一个 AppleScript,它从 Genius 获取歌词并将其添加到我的 iTunes 歌曲中。

本质上,有一个循环遍历我最近添加到 iTunes 中的歌曲,对于每首歌曲,它都会进入天才并试图找到那首歌曲,如果找不到那首歌,则song_nameandsong_artist被放入一个名为的变量中songNotAva. 将其放入变量中的方式是: set songNotAva to songNotAva & {"- ", song_name, " - ", song_artist & return}. 然后,一旦“获取歌曲的所有歌词”的循环完成,如果songNotAva不为空,则执行以下代码:

if songNotAva is not equal to {} then
    do shell script "> $HOME/Desktop/songs.txt"
    do shell script "echo " & songNotAva & ">> $HOME/Desktop/songs.txt"
end if

它将失败的歌曲输出到具有以下格式的文本文件中:

- song_name - song_artist
- song_name - song_artist
- song_name - song_artist

song_nameandsong_artist将反映失败的歌曲)

它工作得非常好,并且完全按照我的预期输出,但问题是 iTunes 中的某些歌曲标题包含括号 (),如果您尝试使用 shell 输出这些括号,它会出现错误并且不会输出任何东西(除非你在括号前有反斜杠,如 \\(\\) 那么它会正常工作)

因此,所有找不到的歌曲都保存在列表中songNotAva,然后在循环结束后打印到文本文件中。

我的问题是如何检查 song_title 是否包含任何括号,如果包含,那么如何在括号前添加反斜杠?

标签: shellterminalapplescript

解决方案


songNotAva是一个列表,您必须使用循环并使用 . 转义每个字符串quoted form of

检查空列表是多余的。如果列表为空,则将跳过循环。

set songNotAva to {"7 rings(example bracket)"}

do shell script "> $HOME/Desktop/songs.txt"
repeat with aSong in songNotAva
    do shell script "echo " & quoted form of aSong & " >> $HOME/Desktop/songs.txt"
end repeat

推荐阅读