无法通过AppleScript或JXA删除Photos子文件夹?求解决方法
解决Photos脚本删除子文件夹的"对象未找到"问题
我之前也踩过这个坑!Photos的AppleScript/JXA接口在处理子文件夹时确实有个小陷阱——直接通过父文件夹的层级引用操作子文件夹,经常会触发"对象未找到"错误,核心原因是Photos的脚本模型对嵌套文件夹的直接识别支持不够稳定,通过文件夹ID来定位删除是最可靠的方案。
AppleScript 正确写法
先获取子文件夹的唯一ID,再通过ID执行删除操作,亲测有效:
tell application "Photos" -- 定位父文件夹和子文件夹 set parentFolder to folder "a" set subFolder to folder "b" of parentFolder -- 获取子文件夹的唯一ID(关键步骤) set subFolderID to id of subFolder -- 通过ID删除子文件夹 delete folder id subFolderID end tell
为什么直接用delete subFolder不行?因为Photos的脚本引擎有时候无法正确解析嵌套层级的对象引用,而ID是每个文件夹的唯一标识,用ID定位不会出现识别偏差。
JXA 正确写法
同样的思路,先获取子文件夹ID,再通过顶层folders集合用ID定位后删除:
const Photos = Application("Photos"); Photos.includeStandardAdditions = true; // 定位子文件夹 const parentFolder = Photos.folders.byName("a"); const subFolder = parentFolder.folders.byName("b"); // 获取ID并执行删除 const subFolderID = subFolder.id(); Photos.delete(Photos.folders.byId(subFolderID));
或者更简洁的单行写法:
const Photos = Application("Photos"); const subFolder = Photos.folders.byName("a").folders.byName("b"); Photos.delete(Photos.folders.byId(subFolder.id()));
额外注意事项
- 确保你的脚本已经获得了系统权限:打开「系统设置」→「隐私与安全性」→「自动化」,允许对应的脚本编辑器(比如Script Editor)控制Photos。
- 如果子文件夹中包含相册或照片,Photos会阻止删除,需要先清空子文件夹内容再操作。
内容的提问来源于stack exchange,提问作者the_last_voice
相关产品推荐
相关产品推荐

