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

PowerShell生成CSV时如何为未匹配项保留空值?

解决PowerShell遍历数组匹配CSV时保留空值的问题

你的问题在于原代码中,当数组元素在CSV的A列找不到匹配项时,Where-Object不会产生任何输出,导致最终的$vendorname数组缺少对应位置的元素。要实现未匹配项保留空值的需求,需要确保每个数组元素都对应一个输出值,匹配到则取B列值,未匹配则输出空字符串。

修改后的代码

$CSV = Import-Csv C:\tmp\mac-vendors-export.csv -Delimiter ';'
$vendormacarray = $Vendormac
$vendorname = foreach ($UniqueVendorMac in $Vendormacarray) {
    # 查找当前数组元素对应的CSV行,只取第一个匹配结果
    $matchedRow = $csv | Where-Object {$_.A -eq $UniqueVendorMac} | Select-Object -First 1
    # 有匹配则输出B列值,无匹配则输出空字符串
    if ($matchedRow) { $matchedRow.B } else { '' }
}

更简洁的写法(PowerShell 7+支持)

利用??空值合并操作符,可以一行完成取值判断:

$CSV = Import-Csv C:\tmp\mac-vendors-export.csv -Delimiter ';'
$vendormacarray = $Vendormac
$vendorname = foreach ($UniqueVendorMac in $Vendormacarray) {
    ($csv | Where-Object {$_.A -eq $UniqueVendorMac} | Select-Object -ExpandProperty B -First 1) ?? ''
}

关键说明

  1. -eq vs -match:如果你的需求是精确匹配A列内容,用-eq比-match更合适(-match是正则表达式匹配,可能会出现意外匹配)。如果确实需要正则匹配,可以保留-match。
  2. Select-Object -First 1:避免CSV中出现重复A列值时返回多个结果,确保每个数组元素只对应一个输出值。
  3. 强制输出空字符串:通过else { '' }或?? ''确保即使没有匹配项,也会向$vendorname数组添加一个空元素,保证结果数组长度和原数组一致,空值位置保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 15:25:25