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

如何使用PowerShell将仅提供文件路径的多个文件复制到新文件夹

PowerShell 批量复制指定路径文件到单一文件夹

以下方案默认你持有的路径列表为每行一个完整文件路径的TXT格式,若为CSV或其他分隔格式可参考后续适配方案调整。


基础运行脚本

# 1. 配置你的路径参数
$pathListFile = "C:\your_path\file_list.txt" # 你的路径列表文件路径
$targetFolder = "D:\collected_files" # 目标存储文件夹路径

# 2. 自动创建目标文件夹(不存在时)
if (-not (Test-Path -Path $targetFolder -PathType Container)) {
    New-Item -ItemType Directory -Path $targetFolder | Out-Null
}

# 3. 逐行读取路径并执行复制
Get-Content -Path $pathListFile | ForEach-Object {
    # 跳过空行
    $sourcePath = $_.Trim()
    if ([string]::IsNullOrWhiteSpace($sourcePath)) {
        return
    }
    # 校验源文件存在后再复制
    if (Test-Path -Path $sourcePath -PathType Leaf) {
        Copy-Item -Path $sourcePath -Destination $targetFolder -Force
    }
}

-Force参数表示遇到重名文件时直接覆盖,不需要交互确认


常用场景适配

  • 路径列表为CSV格式:假设路径存储在full_path列中,将读取路径的代码替换为如下内容即可,其余复制逻辑不变:
    Import-Csv -Path $pathListFile | ForEach-Object {
        $sourcePath = $_.full_path.Trim()
        # 后续复制逻辑和基础脚本一致
    }
    
  • 重名文件自动重命名不覆盖:将Copy-Item部分替换为如下逻辑,会自动给重名文件加序号后缀:
    $fileName = [System.IO.Path]::GetFileName($sourcePath)
    $targetFullPath = Join-Path -Path $targetFolder -ChildPath $fileName
    $suffix = 1
    while (Test-Path -Path $targetFullPath -PathType Leaf) {
        $nameWithoutExt = [System.IO.Path]::GetFileNameWithoutExtension($sourcePath)
        $ext = [System.IO.Path]::GetExtension($sourcePath)
        $fileName = "${nameWithoutExt}_${suffix}${ext}"
        $targetFullPath = Join-Path -Path $targetFolder -ChildPath $fileName
        $suffix++
    }
    Copy-Item -Path $sourcePath -Destination $targetFullPath
    
  • 百万级文件性能优化:给Get-Content加上-ReadCount参数批量读取行,减少磁盘IO开销,示例:
    # 每次读取1000行再处理,可根据实际情况调整数值
    Get-Content -Path $pathListFile -ReadCount 1000 | ForEach-Object {
        $_ | ForEach-Object {
            # 原有复制逻辑
        }
    }
    

注意事项

  • 运行前建议先抽取10-20条路径做测试,确认路径解析、复制逻辑符合预期
  • 网络驱动器路径优先使用UNC格式(如\\file_server\share\test.docx),避免映射盘符挂载异常、权限不足的问题
  • 可自行添加错误日志记录,方便后续排查不存在、无权限访问的文件,示例:在源文件不存在的分支添加Add-Content -Path "copy_fail.log" -Value "未找到文件:$sourcePath"

内容的提问来源于stack exchange,提问作者Jason312

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 16:54:03