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

PowerShell批量处理CSV数据自动执行复制与Robocopy命令求助

问题描述

需要通过PowerShell读取包含asset和computername两列的CSV文件,自动批量执行以下两项操作:

  1. 将c:\folder1\$asset.txt复制并重命名为f:\folder2\config.txt
  2. 使用robocopy命令将f:\folder2复制到\\$ComputerName\folder3

当前脚本需手动修改数组索引,无法自动遍历50+条数据,求自动批量处理的方法。

CSV示例(Computers.csv)

A12345  CN12345
A54321  CN54321

尝试的脚本1

Import-Csv -Delimiter ',' -Path c:\temp\computers.csv -Header 'Asset','ComputerName’ | 
   ForEach-Object {
     $asset += $_.asset
     $ComputerName += $_.NBN
     Copy-Item "c:\folder1\$asset.txt" -Destination "f:\folder2\config.txt"
     robocopy /e  f:\folder2 \\$ComputerName\folder3 
   }

尝试的脚本2

$computers = Import-Csv -Path c:\temp\computers.csv -Header 'Asset','ComputerName'
$asset = $computers[0].asset
$ComputerName = $computers[0].ComputerName

ForEach-Object {
  Copy-Item "c:\folder1\$asset.txt" -Destination "f:\folder2\config.txt"
 
  robocopy /e /is "f:\folder2\" "\\$ComputerName\c$\folder3"  
  }

批量处理解决方案

以下是可自动遍历所有CSV条目并执行操作的正确脚本:

# 读取CSV文件,根据你的示例,分隔符为制表符(若实际是空格则替换为' ')
$computers = Import-Csv -Path "c:\temp\computers.csv" -Header 'Asset','ComputerName' -Delimiter "`t"

# 遍历每条记录
foreach ($pc in $computers) {
    # 1. 复制并重命名文件
    $sourceFile = "c:\folder1\$($pc.Asset).txt"
    $destFile = "f:\folder2\config.txt"
    
    # 先检查源文件是否存在,避免报错
    if (Test-Path $sourceFile) {
        Copy-Item -Path $sourceFile -Destination $destFile -Force
        Write-Host "已完成文件复制: $sourceFile -> $destFile"
    } else {
        Write-Warning "源文件 $sourceFile 不存在,跳过当前设备"
        continue
    }

    # 2. 执行robocopy同步文件夹
    $robocopySource = "f:\folder2"
    $robocopyDest = "\\$($pc.ComputerName)\folder3"
    robocopy /e /is $robocopySource $robocopyDest
    Write-Host "已完成同步: $robocopySource -> $robocopyDest"
}

原脚本问题说明

  1. 脚本1:

    • 错误使用逗号作为分隔符,但你的CSV是空格/制表符分隔,导致数据读取异常
    • 累加变量$asset += $_.asset会让变量变成多值拼接,无法匹配单个文件
    • 引用了不存在的属性$_.NBN,正确应为$_.ComputerName
  2. 脚本2:

    • 仅获取数组第一个元素$computers[0],未遍历所有条目
    • ForEach-Object未指定遍历对象,无法触发循环

注意事项

  • 确保CSV分隔符与脚本中-Delimiter参数一致,空格分隔则改为' '
  • 确认执行脚本的账号有权限访问目标共享文件夹\\$ComputerName\folder3
  • Copy-Item的-Force参数用于覆盖已存在的config.txt,可根据需求移除
  • robocopy返回码0-7均为正常完成,如需错误判断可添加对应逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 11:13:13