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

PowerShell基于共同PC列合并CSV并更新对应行数据的实现方法

PowerShell 按公共PC字段合并两个CSV文件

原脚本错误原因

  • 循环逻辑错误:遍历第二个CSV每行时全量覆盖导出原文件,最终仅会保留最后一次循环的赋值结果,导致所有行都被填充为第二个CSV最后一行的内容
  • 匹配逻辑错误:直接对整个CSV数组的PC列做等值判断,无法实现逐行匹配对应PC的记录
  • 操作风险:直接修改原文件容易丢失原始数据,建议先导出到新文件验证无误后再替换

正确实现方案

我们将第二个CSV转换为哈希表做快速匹配,遍历第一个CSV逐行赋值,最后统一导出结果:

# 配置路径
$initialCsvPath = "\\ADSERVER\Inventaire\InventairePCAD.csv"
$prestaCsvFolder = "\\ADSERVER\Inventaire\"
# 导出到新文件避免覆盖原始数据,验证无误后可手动替换原文件
$exportPath = "\\ADSERVER\Inventaire\InventairePCAD_Merged.csv"

# 导入两个CSV文件
$CSVInitiale = Import-Csv -Path $initialCsvPath -Delimiter ','
$allPrestaCsvPaths = (Get-ChildItem -Path $prestaCsvFolder -Filter 'Presta*.csv').FullName
$PrestaCSV = Import-Csv -Path $allPrestaCsvPaths -Delimiter ','

# 构建PC为键的哈希表,用于快速匹配
$prestaMatchMap = @{}
foreach ($prestaItem in $PrestaCSV) {
    $prestaMatchMap[$prestaItem.PC] = @{
        Nom_du_prestataire = $prestaItem.Nom_du_prestataire
        Date_de_Migration = $prestaItem.Date_de_Migration
    }
}

# 逐行匹配合并字段
$mergedResult = $CSVInitiale | ForEach-Object {
    $nomVal = ""
    $dateVal = ""
    # 匹配到PC则赋值,否则留空
    if ($prestaMatchMap.ContainsKey($_.PC)) {
        $nomVal = $prestaMatchMap[$_.PC].Nom_du_prestataire
        $dateVal = $prestaMatchMap[$_.PC].Date_de_Migration
    }
    # 输出合并后的行
    $_ | Select-Object *, 
        @{Name = "Nom_du_prestataire"; Expression = {$nomVal}},
        @{Name = "Date_de_Migration"; Expression = {$dateVal}}
}

# 导出合并结果
$mergedResult | Export-Csv -Path $exportPath -Delimiter ',' -NoTypeInformation -Encoding UTF8

注意事项

  • 代码默认导出到新文件InventairePCAD_Merged.csv,打开确认内容符合预期后,再替换原文件即可
  • 新增-Encoding UTF8参数避免导出后中文/特殊字符乱码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 14:45:00