如何用AppleScript监测指定文件名的新文件并触发重命名脚本?
替换静态延迟为文件监测的AppleScript方案
核心思路
用循环轮询监测目标文件的存在状态替代固定时长延迟,一旦文件出现在指定下载路径,立即触发重命名操作,之后继续重复下载-监测-重命名的流程。
完整脚本示例
-- 配置参数,根据需求修改 property downloadFolder : POSIX path of (path to downloads folder) -- 本地下载文件夹路径 property targetFileName : "原始报告.pdf" -- 在线服务输出的固定文件名 property newFileName : "每日报告_" & (do shell script "date +%Y%m%d") & ".pdf" -- 重命名后的文件名格式 -- 主流程:重复执行下载、监测、重命名 repeat -- 1. 执行原有的下载操作(替换成你自己的下载代码) log "启动报告下载..." -- your existing download code here -- 2. 等待目标文件出现(替代原有的delay 30) waitForFile(downloadFolder & targetFileName) -- 3. 执行重命名操作 set originalFile to POSIX file (downloadFolder & targetFileName) as alias try tell application "Finder" set name of originalFile to newFileName end tell log "文件已重命名为: " & newFileName on error errMsg log "重命名失败: " & errMsg end try -- 可选:设置下一轮下载的间隔(按需调整) delay 60 -- 比如等待1分钟后启动下一次下载 end repeat -- 自定义处理器:等待指定文件出现 on waitForFile(filePath) repeat until (do shell script "test -f " & quoted form of filePath & "; echo $?") = "0" log "等待目标文件 " & targetFileName & " 中..." delay 1 -- 每秒检查一次,可根据需求调整轮询间隔 end repeat log "目标文件已找到!" end waitForFile
代码说明
- 配置参数:开头的
property块定义了核心路径和文件名,直接修改对应值即可适配你的场景。 - 主循环:
repeat块实现了无限重复的下载-监测-重命名流程,若需要终止可在脚本编辑器中点击停止按钮。 - 文件监测:
waitForFile处理器通过shell命令test -f检查文件是否存在,每秒轮询一次,直到文件出现才退出循环,避免了固定延迟的低效或超时问题。 - 重命名容错:用
try块包裹重命名操作,可处理文件已存在等异常情况。
替代方案:被动式文件夹动作
如果不需要主动触发下载,仅需被动监测下载文件夹,一旦目标文件出现就自动重命名,可使用文件夹动作:
-- 保存为文件夹动作脚本,绑定到下载文件夹即可生效 on adding folder items to theFolder after receiving addedItems property targetFileName : "原始报告.pdf" property newFileNamePrefix : "每日报告_" repeat with anItem in addedItems set itemName to name of (info for anItem) if itemName = targetFileName then set currentDate to do shell script "date +%Y%m%d" set newName to newFileNamePrefix & currentDate & ".pdf" tell application "Finder" set name of anItem to newName end tell log "已自动重命名文件: " & newName end if end repeat end adding folder items to
使用步骤:打开「脚本编辑器」,粘贴代码后保存为.scpt文件;在Finder中右键点击下载文件夹→「服务」→「文件夹动作设置」,添加该脚本并启用。
内容的提问来源于stack exchange,提问作者Silas Ellery
相关产品推荐
相关产品推荐

