如何通过Power Automate自动移动OneDrive共享文件夹内已完成上传的文件
问题根源
你遇到的报错和移动失败本质是两个原因:
When a file is created触发器会在文件上传初始化、系统生成文件对象时就触发,而非等待全部分片上传完成。大文件上传过程中文件处于被上传进程锁定的状态,此时执行移动/删除操作都会失败- 定期扫描+触发的逻辑会重复提交大量无效操作请求,超出Power Automate的接口调用频率限制,触发限流告警
解决方案
方法1:添加文件完整性校验(最推荐,适配OneDrive/SharePoint双场景)
保留现有流程框架的前提下,在Move or rename a file步骤前新增校验环节:
- 首先添加
Delay动作,设置固定延迟3~5分钟(可根据你场景下常见的最大文件上传时长调整),避免刚触发就发起操作 - 新增
Get file metadata动作,读取目标文件的Last Modified(上次修改时间)和File Size(文件大小)属性 - 新增
Do until循环动作,循环判断条件设置为:当前时间 - Last Modified > 2分钟且 连续两次读取的File Size数值完全一致原理:分片上传过程中文件的修改时间会持续更新、文件大小会逐步递增,当两个属性都稳定不变时,说明文件已经完成上传、没有被进程锁定
- 循环内部设置1分钟的间隔延迟,避免高频调用接口触发热限流
- 循环正常退出后再执行移动文件操作
方法2:优化触发逻辑,降低限流概率
你当前使用的Recurrence定期触发+When a file is created的组合会产生大量重复扫描请求,是限流的核心诱因,可以直接替换为单独的When a file is created (properties only)触发器,设置触发条件为文件夹路径等于你的共享文件夹路径即可。该触发器本身会自动监听文件新建事件,无需额外定期扫描,能降低80%以上的无效请求量,从根源上减少限流告警。
额外优化建议
- 可以在
Move or rename a file步骤的设置中开启Retry Policy(重试策略),选择Exponential Interval(指数退避)模式,重试次数设置为3次,单次间隔设置为5分钟,解决偶发的锁冲突问题 - 不推荐使用「创建文件>复制>删除」的方案,大文件复制会占用更多API配额,更容易触发限流,校验完成后直接移动是效率最高的方案
- SharePoint场景下可以额外增加校验逻辑:判断文件的
Checkout User属性是否为空,为空则说明文件没有被上传者锁定,可以正常操作
内容的提问来源于stack exchange,提问作者ExcelEverything
相关产品推荐
相关产品推荐

