首页 > 解决方案 > 如何在 PowerShell 中选择与特定模式匹配的对象

问题描述

因此,对于 excel csv 文件,当至少一个 cd 数字在 AD 列中的单元格不为空时(值是嗨,我也是),所以它应该看起来像这样。

但我不想删除在其广告中包含其中之一的重复 cd 编号(嗨,我也是),并且我不想删除单个 cd 编号,无论它在 AD 列中有一个空单元格还是有(嗨,我也是)在 AD 中作为值。

这是我尝试的脚本:

$GroupArray2 = @(
    'hi'
    'me'
    'to'
)
$items4 = Import-Csv -Path 'C:\Temp\Excel6.csv' | Group-object -Property 'AD' | Where-Object count -gt 1 | Where-object {$_.'AD' -in $GroupArray2} | Foreach-object { $selections3 = $_.Group | Select-Object -Property * }
$items4 | Export-CSv -path 'C:\Temp\Excel7.csv' -NoTypeInformation 

但是当我尝试它时它不会输出任何东西。任何帮助,将不胜感激!

标签: excelpowershellduplicatesconditional-statements

解决方案


在检查位置之前,您需要按组分隔对象$_.'AD' -in $GroupArray2

$items4 = Import-Csv -Path 'C:\Temp\Excel6.csv' | Group-object -Property 'CD' | Where-Object count -gt 1 | ForEach-Object {$_.group}  | Where-object {$_.'AD' -in $GroupArray2}

还要注意您使用哪种分隔符。您的示例 csv 包含逗号作为字符串的一部分,它也是默认分隔符。使用-Delimiter参数 ofImport-/Export-Csv来使用其他符号:

$items4 = Import-Csv -Path $path -Delimiter ";" | Group-object -Property 'CD' | Where-Object count -gt 1 | ForEach-Object {$_.group}  | Where-object {$_.'AD' -in $GroupArray2} 
$items4 | Export-CSv -path 'C:\Temp\Excel7.csv' -NoTypeInformation -Delimiter ";"

推荐阅读