如何用PowerAutomate遍历上传文件资源管理器的所有文件夹及文件至SharePoint库
核心逻辑
通过队列式循环+递归处理,先处理当前文件夹的文件,再收集所有子文件夹加入待处理队列,直到所有层级的文件夹都被遍历完成。
分步实现
1. 初始化变量
- 创建字符串变量
currentFolderPath:初始值设为你要开始遍历的根文件夹路径(例如C:\YourRootFolder) - 创建数组变量
folderQueue:初始时将currentFolderPath添加到数组中,作为第一个待处理项
2. 循环处理所有文件夹
添加 Do until 循环,设置循环终止条件为 length(variables('folderQueue')) equals 0(队列为空时停止)
循环内执行操作:
- 取出队列首项:
- 用表达式
first(variables('folderQueue'))获取当前要处理的文件夹路径 - 更新
folderQueue变量,用remove(variables('folderQueue'), 0)移除已取出的路径
- 用表达式
- 同步SharePoint文件夹结构:
- 拆分本地文件夹路径,提取相对于根文件夹的子路径(比如根路径是
C:\Root,当前文件夹是C:\Root\Team\Project,则相对路径为Team/Project) - 先调用 Get folder metadata using path 动作,传入SharePoint文档库路径+相对路径,判断文件夹是否存在
- 如果不存在,调用 Create folder 动作在SharePoint中创建对应路径的文件夹
- 拆分本地文件夹路径,提取相对于根文件夹的子路径(比如根路径是
- 上传当前文件夹内的文件:
- 调用 List folder 动作,路径设为当前本地文件夹,勾选「Include subfolders?」为 No(仅获取当前文件夹的文件)
- 添加 Apply to each 循环遍历返回的文件,在循环内用 Upload file 动作将本地文件上传到对应的SharePoint文件夹
- 收集子文件夹到队列:
- 再次调用 List folder 动作,路径设为当前本地文件夹,勾选「Include subfolders?」为 No,然后在动作的「Filter array」中筛选出
IsFolder equals true的项(仅保留子文件夹) - 添加 Apply to each 循环遍历这些子文件夹,用
append to array variable动作将每个子文件夹的Full Path添加到folderQueue中
- 再次调用 List folder 动作,路径设为当前本地文件夹,勾选「Include subfolders?」为 No,然后在动作的「Filter array」中筛选出
关键注意事项
- 确保本地网关已正确配置,Power Automate能访问你的本地文件系统
- 处理大量文件时,可在流设置中调整运行时长(默认1小时),避免超时
- 添加错误处理:用 Scope 包裹上传逻辑,配合 Run after 设置,单个文件上传失败时不中断整个流
- 避免重复创建文件夹:必须先判断SharePoint中对应路径是否存在,再执行创建操作
内容的提问来源于stack exchange,提问作者Adarsh Awasthi
相关产品推荐
相关产品推荐

