You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.23 08:13:04