如何用Power Automate将SharePoint子文件夹文件复制到指定文件夹
方法1:Power Automate(无代码实时同步,推荐)
这是最适合普通用户的方案,无需开发能力,能实时触发同步:
- 打开Power Automate,创建自动化云流,触发条件选择「当文件创建时(属性仅)」
- 配置触发动作:
- 站点地址选目标SharePoint站点
- 库名称选「文档」(对应Shared Documents)
- 文件夹路径填
/General/Ops/Mock/,勾选「包括子文件夹」
- 添加「获取文件内容」动作,使用触发动作输出的「文件标识符」作为参数
- 添加「创建文件」动作:
- 站点地址选同一个站点
- 文件夹路径填
/General/Ops/Test/Mock_raw/ - 文件名用触发动作里的「文件名」
- 文件内容选「获取文件内容」输出的「文件内容」
- 可选优化:
- 如果需要保留原文件元数据(比如创建人、修改时间),添加「更新文件属性」动作,把原文件的对应字段同步到新文件
- 重名文件处理:在「创建文件」动作的「如果文件已存在」选项中,选择「替换」或「跳过」
方法2:PowerShell脚本(适合定期同步,管理员用)
如果需要定期批量同步,可编写PowerShell脚本并通过Windows任务计划定时执行:
# 连接到SharePoint Online Connect-SPOService -Url "https://你的租户名.sharepoint.com/sites/你的站点名" # 定义源和目标文件夹的服务器相对路径 $sourceFolderUrl = "/sites/你的站点名/Shared Documents/General/Ops/Mock/" $targetFolderUrl = "/sites/你的站点名/Shared Documents/General/Ops/Test/Mock_raw/" # 获取近24小时内新增的文件(可根据需求调整时间范围) $newFiles = Get-SPOFile -Folder $sourceFolderUrl -Recursive | Where-Object { $_.TimeCreated -gt (Get-Date).AddHours(-24) } # 批量复制文件 foreach ($file in $newFiles) { Copy-SPOFile -SourceUrl $file.ServerRelativeUrl -TargetUrl $targetFolderUrl -OverwriteIfAlreadyExists }
说明:执行脚本前需确保已安装SharePoint Online Management Shell,且运行账号有源文件夹读取权限和目标文件夹写入权限。
方法3:SPFx事件接收器(适合定制化开发)
如果需要更复杂的业务逻辑(比如过滤特定类型文件、自定义元数据映射),可通过SPFx开发事件接收器:
- 创建SPFx扩展项目,实现
ListItemAdded事件处理逻辑 - 在事件处理代码中,通过SharePoint REST API获取新增文件的信息,调用
CopyTo方法将文件复制到目标路径 - 将扩展部署到目标站点,并绑定到源文档库的文件夹
注意事项
- 权限配置:确保同步工具(流/脚本/扩展)拥有源文件夹的读取权限和目标文件夹的写入权限
- 避免重复同步:Power Automate可通过触发条件的「文件创建时间」过滤,PowerShell可通过时间范围筛选,SPFx可标记已同步文件的自定义属性
- 子文件夹覆盖:所有方法都支持遍历源文件夹的子目录,确保新增的子文件都能被同步
内容的提问来源于stack exchange,提问作者Sharon Omwega
相关产品推荐
相关产品推荐

