我想以编程方式修改itunes上轨道的文件系统路径,以便我可以将字符串转换应用到某些轨道位置(现在存储在文件系统的不同位置)。
我尝试使用AppleScript更新相关曲目的位置属性,但在调用“将mytrack的位置设置为...”时出现文件结束错误。
我在网上看到了其他各种黑客攻击,包括导出整个轨道数据库,用XML修改它,然后重新导入它 - 但这似乎丢失了太多元数据(例如播放列表)。
答案 0 :(得分:3)
查看更多代码真的很有帮助。特别感兴趣的是您使用的价值及其衍生方式。查看您获得的确切错误消息也很有用(如果从脚本编辑器 / 运行程序,您应该可以从AppleScript错误对话框表中复制文本AppleScript的编辑器的)。
file track
类的字典条目显示其location
属性是可写alias
值。您可能遇到的问题是您没有使用该值的别名。
以下代码显示了如何使用choose file
(返回alias
)的交互式提示更改曲目的位置:
set m to path to music folder
tell application "iTunes"
set trk to first item of selection
set l to location of trk
if class of l is alias then
set m to l
end if
set {d, a, n} to {database ID, artist, name} of trk
choose file with prompt "Choose the file to use for " & d & ": " & a & "—" & n default location m
set location of trk to result
end tell
choose file
方法不是您想要的,因为您正在进行某种基于字符串的自动路径名转换。
在AppleScript中使用路径名时,您可以使用两种类型:POSIX和HFS。 POSIX路径名具有斜杠分隔的组件(并允许任何组件内的冒号)。 HFS路径名具有冒号分隔的组件(并允许在任何组件内部使用斜杠),并且它们通常以卷名组件开头。
要将存储在变量str
中的POSIX路径名转换为AppleScript alias
,请使用以下表达式:
POSIX file str as alias
要将存储在变量str
中的HFS路径名转换为AppleScript alias
,请使用以下表达式:
alias str
例如:
tell application "iTunes"
set trk to first item of selection
set l to location of trk
set newPath to my computeNewPath(POSIX path of l)
set location of trk to POSIX file newPath as alias
end tell
to computeNewPath(pp)
-- presumably something interesting happens here
return pp
end computeNewPath
答案 1 :(得分:2)
如何在保持iTunes资料库数据库(iTunes Library.itl
)完好无损的情况下,将媒体文件(未经iTunes“整理”)移动到其他位置:
mv ~/MyMusic /Volumes/Huge/
)ln -s /Volumes/Huge/MyMusic ~/MyMusic
)运行此AppleScript:
-- Mark missing tracks (and update database with real path of existing
-- tracks) in iTunes
-- Instructions:
-- * symlink new file location to old location (old location points to
-- new location, file exists)
-- * select tracks to scan/update
-- * run the script
-- * missing tracks are marked with (!) and all other track paths have
-- been updated to the real path (symlinks eliminated) in iTunes
tell application "iTunes"
set fx to fixed indexing
set fixed indexing to true
set Sel to the selection
repeat with i from 1 to number of items in Sel
set trk to item i of Sel
set loc to (get location of trk as text)
end repeat
set fixed indexing to fx
end tell
现在所有曲目都应指向正确的位置,并且可以删除符号链接。这可以通过在移动的轨道上选择获取信息并验证路径指向新位置来验证。
如果没有让符号链接正确,iTunes将在每个缺失的曲目旁边显示(!)
。要解决此问题,只需在旧位置创建一个指向新位置的符号链接,然后再次运行该脚本。提示:“获取信息”对话框可用于确定缺失轨道的旧位置。
这适用于iTunes 11.0.5
答案 2 :(得分:0)
在millerdev的先前回答中添加了内容,我更新了脚本以与MacOS Catalina和新的Music应用程序一起使用。只需创建一个$ HOME / Library / Music / Scripts目录并将其放置在这里即可。
tell application "Music"
set fx to fixed indexing
set fixed indexing to true
set Sel to the selection
repeat with i from 1 to number of items in Sel
set trk to item i of Sel
set l to location of trk
set location of trk to l
end repeat
set fixed indexing to fx
end tell