如果包含方括号 (AppleScript),如何将双 \ 添加到字符串

How to add double \ to a string if it contains brackets (AppleScript)

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

基本上有一个循环遍历我最近添加到 iTunes 中的歌曲,对于每首歌曲,它都会去找天才并尝试找到那首歌,如果找不到这首歌,那么 song_namesong_artist 被放入一个名为 songNotAva 的变量中。它放在变量中的方式是: set songNotAva to songNotAva & {"- ", song_name, " - ", song_artist & return}。 然后一旦到 "get all the lyrics for songs" 的循环完成,如果 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_namesong_artist 将反映失败的歌曲)

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

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

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

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