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

PowerShell批量复制网络文件求助:远程文件批量迁移至本地

批量复制远程文件的PowerShell解决方案

没问题,这个需求用PowerShell就能轻松搞定——既然你已经有了所有远程文件的路径列表,而且权限也到位,那直接基于这个列表批量处理就行。我给你准备了两种方案,你可以根据自己的PowerShell版本和实际需求选:

基础循环复制方案(兼容所有PowerShell版本)

这个方案逻辑简单,容易理解和调试,适合新手或者不需要极致效率的场景:

# 配置路径:替换成你自己的输入文件和本地目标文件夹路径
$inputFilePath = "C:\your\path\file_list.txt"
$localDestination = "C:\your\local\target\folder"

# 先确保本地目标文件夹存在,不存在就创建
if (-not (Test-Path -Path $localDestination)) {
    New-Item -ItemType Directory -Path $localDestination | Out-Null
}

# 读取文件列表,逐个复制
Get-Content -Path $inputFilePath | ForEach-Object {
    $remoteFile = $_
    # 跳过空行,避免无效操作
    if ([string]::IsNullOrWhiteSpace($remoteFile)) { return }
    
    try {
        # 复制文件,-Force参数会覆盖本地同名文件,不需要的话可以删掉
        Copy-Item -Path $remoteFile -Destination $localDestination -Force -ErrorAction Stop
        Write-Host "✅ 成功复制: $remoteFile"
    }
    catch {
        Write-Error "❌ 复制失败: $remoteFile - 错误详情: $_"
    }
}

代码说明:

  • 先检查并创建本地目标文件夹,避免因为文件夹不存在报错
  • 读取输入txt的每一行,跳过空行(防止列表里的无效行影响)
  • 用try/catch捕获复制过程中的错误,比如文件不存在、权限临时异常等,方便排查问题
  • Write-Host会实时显示复制状态,让你知道进度

并行复制方案(提升效率,适合大量文件)

如果你的文件数量较多(150+虽然不算特别多,但并行能节省不少时间),可以用并行处理的方式同时复制多个文件。这里分两种情况:

适用于PowerShell 7及以上版本

PowerShell 7+自带了ForEach-Object -Parallel参数,用起来很方便:

$inputFilePath = "C:\your\path\file_list.txt"
$localDestination = "C:\your\local\target\folder"

# 确保目标文件夹存在
if (-not (Test-Path -Path $localDestination)) {
    New-Item -ItemType Directory -Path $localDestination | Out-Null
}

# 并行复制,-ThrottleLimit控制同时运行的任务数(建议根据网络性能调整,比如5-15)
Get-Content -Path $inputFilePath | Where-Object { -not [string]::IsNullOrWhiteSpace($_) } | ForEach-Object -Parallel {
    $remoteFile = $_
    $dest = $using:localDestination
    try {
        Copy-Item -Path $remoteFile -Destination $dest -Force -ErrorAction Stop
        Write-Host "✅ 成功复制: $remoteFile"
    }
    catch {
        Write-Error "❌ 复制失败: $remoteFile - 错误详情: $_"
    }
} -ThrottleLimit 10

适用于PowerShell 5.1版本

如果还在使用Windows默认的PowerShell 5.1,可以用后台作业来实现并行:

$inputFilePath = "C:\your\path\file_list.txt"
$localDestination = "C:\your\local\target\folder"

if (-not (Test-Path -Path $localDestination)) {
    New-Item -ItemType Directory -Path $localDestination | Out-Null
}

# 读取有效文件路径
$files = Get-Content -Path $inputFilePath | Where-Object { -not [string]::IsNullOrWhiteSpace($_) }

# 创建后台复制任务
$jobs = $files | ForEach-Object {
    Start-Job -ScriptBlock {
        $remoteFile = $args[0]
        $dest = $args[1]
        try {
            Copy-Item -Path $remoteFile -Destination $dest -Force -ErrorAction Stop
            return "✅ 成功复制: $remoteFile"
        }
        catch {
            return "❌ 复制失败: $remoteFile - 错误详情: $_"
        }
    } -ArgumentList $_, $localDestination
}

# 等待所有任务完成,然后获取结果
Write-Host "等待所有复制任务完成..."
Wait-Job -Job $jobs | Receive-Job
# 清理后台任务,避免残留
Remove-Job -Job $jobs

一些注意事项

  • 请确保输入txt文件里的每个路径都是有效且完整的远程路径(比如\\remote-server\share\file.txt),不要有多余的空格或换行
  • 如果不需要覆盖本地已有的同名文件,删掉代码里的-Force参数即可
  • 并行方案的-ThrottleLimit不要设得太高,否则可能会占用过多网络带宽或系统资源,导致复制变慢甚至出错
  • 可以在复制前添加Test-Path $remoteFile检查远程文件是否存在,提前过滤无效路径

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:11:58