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

PowerShell导入CSV后查找匹配值并更新关联对象ID的实现方法

PowerShell 批量填充同名人员ID解决方案

实现思路

原有嵌套循环方案不仅效率低,还需要手动定位字段索引,容易出错。我们可以利用表结构的固定规则(所有*Name字段对应前缀完全相同的*ID字段),分两步实现需求:

  1. 全局遍历所有行的所有名称字段,收集所有不重复的人名,给每个名字分配唯一ID,存入映射表
  2. 二次遍历所有行,根据映射表给对应ID字段赋值,同一个人名不管出现在哪个位置都会分配相同ID

完整代码

# 1. 导入CSV文件
$csvData = Import-Csv ".\import.csv" -Encoding UTF8

# 2. 自动识别所有名称字段与对应ID字段的配对,无需手动列150个字段
$fieldMapping = $csvData[0].PSObject.Properties.Name | Where-Object { $_ -like "*Name" } | ForEach-Object {
    [PSCustomObject]@{
        NameColumn = $_
        IdColumn = $_ -replace "Name$", "ID"
    }
}

# 3. 建立人名-ID映射表,全局分配唯一ID
$nameIdMap = @{}
$nextId = 1
foreach ($row in $csvData) {
    foreach ($map in $fieldMapping) {
        $currentName = $row.$($map.NameColumn)
        # 跳过空值,未收录的人名分配新ID
        if (-not [string]::IsNullOrWhiteSpace($currentName) -and -not $nameIdMap.ContainsKey($currentName)) {
            $nameIdMap[$currentName] = $nextId++
        }
    }
}

# 4. 批量回填所有ID字段
foreach ($row in $csvData) {
    foreach ($map in $fieldMapping) {
        $currentName = $row.$($map.NameColumn)
        if (-not [string]::IsNullOrWhiteSpace($currentName)) {
            $row.$($map.IdColumn) = $nameIdMap[$currentName]
        }
    }
}

# 5. 导出处理后的CSV
$csvData | Export-Csv ".\output.csv" -Encoding UTF8 -NoTypeInformation

适配说明

  • 如果你的CSV中名称字段后缀是荷兰语Naam,将代码中*Name和"Name$"两处的Name替换为Naam即可
  • 如果CSV编码为GBK,将Encoding UTF8修改为Encoding Default

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 00:27:02