求助:如何为AppleScript创建的摄影工作流文件夹添加占位图
问题:AppleScript创建摄影工作流文件夹后,无法添加占位图让Lightroom识别
我写了一段AppleScript用来创建摄影工作流的文件夹结构,脚本运行正常,但Adobe Lightroom识别不了空文件夹,想给每个创建的文件夹添加占位图却没成功。
原文件夹创建脚本:
set loc to (choose folder with prompt "Choose the folder location:") set ClientCode to text returned of (display dialog "Please enter the client code:" default answer "XXX") set ShootName to text returned of (display dialog "Please enter the shoot name:" default answer "Product Shoot") set OutputName to "2 - Output" set ProdName to "1 - Production" set FinalImageName to ShootName & " Final Images" set SelectImageName to ShootName & " Image Selects" tell application "Finder" activate make new folder at loc with properties {name:ShootName} open folder ShootName of folder loc set current view of window 1 to list view set RAWFname to "1 - " & ClientCode & " RAW Files" as string set SelectsFname to "2 - " & ClientCode & " Selects" as string set RetouchingFname to "3 - " & ClientCode & " For Retouching" as string set MastersFname to "4 - " & ClientCode & " Master Final Files" as string set WebsiteFname to "5 - " & ClientCode & " For Website" as string make new folder at folder ShootName of folder loc with properties {name:OutputName} make new folder at folder OutputName of folder ShootName of folder loc with properties {name:SelectImageName} make new folder at folder OutputName of folder ShootName of folder loc with properties {name:FinalImageName} make new folder at folder FinalImageName of folder OutputName of folder ShootName of folder loc with properties {name:"2500px JPGs"} make new folder at folder FinalImageName of folder OutputName of folder ShootName of folder loc with properties {name:"Full Res JPGs"} make new folder at folder ShootName of folder loc with properties {name:ProdName} make new folder at folder ProdName of folder ShootName of folder loc with properties {name:RAWFname} make new folder at folder ProdName of folder ShootName of folder loc with properties {name:SelectsFname} make new folder at folder ProdName of folder ShootName of folder loc with properties {name:RetouchingFname} make new folder at folder ProdName of folder ShootName of folder loc with properties {name:MastersFname} make new folder at folder ProdName of folder ShootName of folder loc with properties {name:WebsiteFname} end tell
我试过用ChatGPT生成复制占位图的脚本,但遇到权限问题,而且脚本识别不了已创建的文件夹,尝试的代码如下:
set destinationPath to POSIX path of RAWFname set imagePath to POSIX path of "/Users/myusername/camera.jpg" do shell script "cp " & quoted form of POSIX path of imagePath & " " & quoted form of POSIX path of destinationPath
解决方案
核心问题分析
- 你尝试的代码里,
RAWFname只是文件夹名称字符串,不是完整的Finder文件夹对象,无法直接转换为有效POSIX路径。 - 权限问题通常源于Shell命令未正确处理路径中的空格/特殊字符,或是占位图所在位置无读取权限。
修改后的完整脚本
下面的脚本会在创建每个文件夹后立即复制占位图到对应目录,你需要把placeholderImagePath替换成自己的占位图实际路径:
set loc to (choose folder with prompt "选择文件夹位置:") set ClientCode to text returned of (display dialog "请输入客户代码:" default answer "XXX") set ShootName to text returned of (display dialog "请输入拍摄项目名称:" default answer "产品拍摄") set OutputName to "2 - 输出" set ProdName to "1 - 制作" set FinalImageName to ShootName & " 最终图片" set SelectImageName to ShootName & " 选图" -- 替换为你的占位图实际路径 set placeholderImagePath to "/Users/你的用户名/Desktop/placeholder.jpg" tell application "Finder" activate -- 创建根文件夹并保存对象 set rootFolder to make new folder at loc with properties {name:ShootName} open rootFolder set current view of window 1 to list view set RAWFname to "1 - " & ClientCode & " RAW文件" as string set SelectsFname to "2 - " & ClientCode & " 选图" as string set RetouchingFname to "3 - " & ClientCode & " 待修图" as string set MastersFname to "4 - " & ClientCode & " 最终母版文件" as string set WebsiteFname to "5 - " & ClientCode & " 用于网站" as string -- 创建Output分支文件夹并添加占位图 set outputFolder to make new folder at rootFolder with properties {name:OutputName} copyPlaceholderToFolder(outputFolder, placeholderImagePath) set selectImageFolder to make new folder at outputFolder with properties {name:SelectImageName} copyPlaceholderToFolder(selectImageFolder, placeholderImagePath) set finalImageFolder to make new folder at outputFolder with properties {name:FinalImageName} copyPlaceholderToFolder(finalImageFolder, placeholderImagePath) set jpg2500Folder to make new folder at finalImageFolder with properties {name:"2500px JPGs"} copyPlaceholderToFolder(jpg2500Folder, placeholderImagePath) set fullResJpgFolder to make new folder at finalImageFolder with properties {name:"全分辨率JPG"} copyPlaceholderToFolder(fullResJpgFolder, placeholderImagePath) -- 创建Production分支文件夹并添加占位图 set prodFolder to make new folder at rootFolder with properties {name:ProdName} copyPlaceholderToFolder(prodFolder, placeholderImagePath) set rawFolder to make new folder at prodFolder with properties {name:RAWFname} copyPlaceholderToFolder(rawFolder, placeholderImagePath) set selectsFolder to make new folder at prodFolder with properties {name:SelectsFname} copyPlaceholderToFolder(selectsFolder, placeholderImagePath) set retouchingFolder to make new folder at prodFolder with properties {name:RetouchingFname} copyPlaceholderToFolder(retouchingFolder, placeholderImagePath) set mastersFolder to make new folder at prodFolder with properties {name:MastersFname} copyPlaceholderToFolder(mastersFolder, placeholderImagePath) set websiteFolder to make new folder at prodFolder with properties {name:WebsiteFname} copyPlaceholderToFolder(websiteFolder, placeholderImagePath) end tell -- 封装复制占位图的函数 on copyPlaceholderToFolder(targetFolder, placeholderPath) set targetPosixPath to POSIX path of targetFolder -- 用quoted form处理路径中的空格和特殊字符,避免Shell命令出错 do shell script "cp " & quoted form of placeholderPath & " " & quoted form of targetPosixPath end copyPlaceholderToFolder
关键修改点
- 保存文件夹对象:创建文件夹时将结果赋值给变量(如
rootFolder、outputFolder),直接获取完整有效路径,避免字符串拼接错误。 - 封装复制逻辑:把占位图复制做成函数,减少重复代码,方便后续修改。
- 路径安全处理:用
quoted form包裹所有路径,解决空格、特殊字符导致的Shell命令失效问题。 - 权限排查:确保占位图所在位置有读取权限,目标文件夹有写入权限。若仍遇权限问题,可在系统设置→隐私与安全性→完全磁盘访问权限中,给Finder勾选权限。
内容的提问来源于stack exchange,提问作者Bradley
相关产品推荐
相关产品推荐

