基于CSV批量查找并复制指定PDF文件的PowerShell脚本实现求助
基于CSV批量查找并复制指定PDF文件的PowerShell脚本实现求助
我完全懂你的困扰!你想从分号分隔的CSV里读取COL2的文件名前缀,自动加上.pdf后缀,然后在共享文件夹(包括所有子文件夹)里找到这些文件,复制到本地目录,而且不想手动罗列一堆子文件夹对吧?之前的脚本因为用错了Copy-Item的-Recurse参数才没达到预期效果,我给你整理了一套更简洁靠谱的方案:
解决方案代码
# 先配置好你的路径参数,根据实际情况修改 $csvFilePath = "C:\test\test.csv" $sourceRootDir = "\\server\share\folder" # 测试阶段可以换成你的本地源目录,比如C:\test\source $destinationDir = "C:\temp\dest" # 先确保目标目录存在,不存在就自动创建 if (-not (Test-Path -Path $destinationDir)) { New-Item -Path $destinationDir -ItemType Directory | Out-Null } # 导入CSV并逐个处理每行的文件名 Import-Csv -Path $csvFilePath -Delimiter ";" | ForEach-Object { # 拼接出完整的PDF文件名 $targetPdfName = "$($_.COL2).pdf" Write-Host "正在查找文件: $targetPdfName" # 递归遍历源目录,精准匹配目标PDF文件 $matchedFiles = Get-ChildItem -Path $sourceRootDir -Filter $targetPdfName -Recurse -File if ($matchedFiles) { foreach ($file in $matchedFiles) { Write-Host "找到文件: $($file.FullName),开始复制..." # 复制到目标目录,-Force可以覆盖已存在的同名文件,不需要可以删掉 Copy-Item -Path $file.FullName -Destination $destinationDir -Force } } else { Write-Warning "⚠️ 未找到文件: $targetPdfName" } }
为什么这个脚本能解决你的问题?
- 用
Get-ChildItem的-Recurse参数递归查找文件,这才是正确的递归查找姿势,之前你用Copy-Item的-Recurse是用来复制整个目录的,完全不是一回事 - 不需要手动罗列所有子文件夹,脚本会自动遍历
sourceRootDir下的所有层级子目录 - 加入了状态提示,方便你跟踪每个文件的查找和复制情况
- 自动创建目标目录,避免因为目录不存在导致复制失败
一些实用提示
- 如果共享文件夹需要特定权限,确保当前运行脚本的用户有该文件夹的读取权限,同时目标目录要有写入权限
- 如果你不想覆盖目标目录里已有的同名文件,把
Copy-Item里的-Force参数去掉就行 - 测试阶段可以先把
sourceRootDir换成你的本地测试目录,确认脚本正常工作后再换成共享文件夹路径
备注:内容来源于stack exchange,提问作者RandomUser
相关产品推荐
相关产品推荐

