Windows下如何按名单自动批量复制SharePoint文件夹间的PDF文件
核心逻辑:Power Automate本身不支持直接解析Word文档内容,只要补全文件名清单的结构化读取环节,或者直接用本地PowerShell调用SharePoint接口,就能完成全流程自动匹配复制,两种方案均适配Windows系统,无需额外付费工具。
方案1:低代码Power Automate流实现(无代码基础适用)
- 预处理清单文件:打开存储文件名的Word文档,全选所有PDF文件名,复制粘贴到本地新建的纯文本
.txt文件中,确保每行仅存1个PDF文件名,删除多余的序号、空格、换行符,保存到本地可访问路径。 - 新建Power Automate即时云端流,第一步添加「初始化变量」操作,变量类型选择
Array,自定义变量名如FileMatchList。 - 添加「读取文本文件」操作,通过OneDrive同步或本地数据网关连接刚才保存的txt清单文件,后续追加「拆分字符串」操作,以换行符为分隔符拆分读取到的文本内容,将拆分结果赋值给之前创建的
FileMatchList数组。 - 添加「列出文件夹中的文件」操作,选择对应SharePoint站点地址,指定存放PDF的源文件夹路径,将操作的分页阈值调整为500,覆盖200+文件的读取需求避免漏项。
- 添加「应用到每一个」控件,遍历输入选择上一步拉取到的所有源文件,控件内部嵌套条件判断:通过
contains()函数校验当前遍历到的文件名是否存在于FileMatchList数组中,匹配成功则执行「复制文件」操作,目标位置选择指定的SharePoint目标文件夹,可根据需求设置文件冲突时的覆盖/重命名规则。
操作提示:如果清单内存在重名文件,提前在文件名后补充区分标识,避免匹配错误。
方案2:PowerShell脚本直连实现(批量操作效率更高)
- 以当前用户权限安装SharePoint操作依赖模块,打开Windows PowerShell(不需要管理员权限),执行以下命令,弹出确认提示时输入Y回车即可:
Install-Module -Name PnP.PowerShell -Scope CurrentUser - 同方案1的预处理步骤,将Word中的文件名清单导出为纯文本文件,存为
C:\temp\copy_list.txt,每行一个PDF文件名。 - 打开PowerShell ISE或任意文本编辑器,粘贴以下脚本,替换其中的站点地址、源路径、目标路径为实际环境参数:
# 替换为你的实际配置参数 $siteAddress = "你的SharePoint站点完整地址" $sourceFolderPath = "源文档库名称/源文件夹相对路径" $targetFolderPath = "目标文档库名称/目标文件夹相对路径" $fileListPath = "C:\temp\copy_list.txt" # 登录连接SharePoint站点 Connect-PnPOnline -Url $siteAddress -UseWebLogin # 读取待复制文件名清单,自动去除首尾空格 $waitCopyFiles = Get-Content $fileListPath | ForEach-Object { $_.Trim() } # 拉取源文件夹下所有文件,设置分页大小覆盖全量文件 $allSourceItems = Get-PnPListItem -List $sourceFolderPath.Split('/')[0] -FolderSiteRelativeUrl $sourceFolderPath -PageSize 1000 # 遍历匹配并复制 foreach($item in $allSourceItems){ $currentFileName = $item.FileLeafRef if($waitCopyFiles -contains $currentFileName){ Copy-PnPFile -SourceUrl $item.FileRef -TargetUrl "$targetFolderPath/$currentFileName" -Force Write-Host "复制完成:$currentFileName" } }
- 执行脚本,在弹出的微软账号登录窗口输入有SharePoint读写权限的账号完成认证,等待控制台输出所有复制完成的文件名后,到目标文件夹核对文件数量即可。
注意:两种方案正式跑全量任务前,建议先选3-5个测试文件走一遍流程,确认匹配规则、路径配置无误后再执行全量操作,避免误复制。
内容的提问来源于stack exchange,提问作者Pat Mat
相关产品推荐
相关产品推荐

