如何在Power Automate中无嵌套限制遍历OneDrive并合并深层PDF?
Power Automate递归遍历OneDrive嵌套文件夹并合并PDF方案
核心方案:递归队列替代多层嵌套循环
Power Automate的Do until循环+数组队列是避开8层For each限制的最优解,通过广度/深度优先遍历逻辑,自动适配任意嵌套层数(包括10层)。
1. 初始化变量与队列
- 调用
List files in folder获取目标根文件夹内容,初始化数组变量folderQueue,将根文件夹下所有子文件夹加入队列。 - 初始化
processedFolders数组,用于记录已处理文件夹,防止重复操作。
2. 用Do until循环处理队列
设置循环终止条件为length(variables('folderQueue')) equals 0(队列为空时停止):
- 取出队列首个文件夹:用
first(variables('folderQueue'))得到currentFolder。 - 获取当前文件夹内容:调用
List files in folder,传入currentFolder的ID。- 筛选PDF文件:用
Filter array,条件设为File extension等于.pdf。 - 合并PDF:若筛选结果非空,调用
Merge PDF操作,将所有PDF合并为单个文件,保存至当前文件夹。
- 筛选PDF文件:用
- 收集子文件夹:再次用
Filter array筛选当前文件夹下的子文件夹(Item type等于Folder),将其加入folderQueue尾部。 - 更新队列:将
currentFolder加入processedFolders,并用skip(variables('folderQueue'), 1)移除已处理的首个文件夹。
Switch方案说明(可选)
若要使用Switch,需基于文件夹层级判断,但灵活性远不如递归队列:
- 拆分文件夹路径(用
split()按/分割)得到层级数。 - 用Switch匹配层级数,对应不同层级执行
List files in folder。但此方法需提前预估最大层级,无法自适应未知深度的嵌套结构。
关键注意事项
- 开启
List files in folder的分页功能,避免因文件过多遗漏内容。 - 若单文件夹PDF数量超过
Merge PDF限制(通常50个),可分批次合并后再合并最终文档。 - 循环中添加1秒
Delay,或延长流超时时间,防止大文件夹遍历超时。
内容的提问来源于stack exchange,提问作者KatiePanda
相关产品推荐
相关产品推荐

