我正在尝试根据位置列过滤.csv文件。该列具有各种位置条目,我只需要包含某些位置的行中的信息,然后该信息就会导出到单独的.csv文件中。通过使用每个位置过滤器多次搜索.csv文件,我可以使它正常工作,但是尝试将其组合为1个搜索时,我没有任何运气。

我现在所拥有的是:

    $csv = Import-Csv "${filepath}\temp1.csv"
    $csv | Where-Object location -like "co*" | select EmployeeNumber | Export-Csv "${filepath}\disablelist.csv" -NoTypeInformation
    $csv | Where-Object location -like "cc*" | select EmployeeNumber | Export-Csv "${filepath}\disablelist.csv" -Append -NoTypeInformation
    $csv | Where-Object location -like "dc*" | select EmployeeNumber | Export-Csv "${filepath}\disablelist.csv" -Append -NoTypeInformation
    $csv | Where-Object location -like "mf*" | select EmployeeNumber | Export-Csv "${filepath}\disablelist.csv" -Append -NoTypeInformation

我想要的是下面的东西。我没有任何错误,但是得到的只是一个空白的.csv文件:
    $locations = "co*","cc*","dc*","mf*"
    $csv = Import-Csv "${filepath}\temp1.csv"
    $csv | Where-Object location -like $locations | select EmployeeNumber | Export-Csv "${filepath}\disablelist.csv" -NoTypeInformation

我已经潜伏了一段时间,通常我可以根据发现的内容一起弗兰肯斯坦一个脚本,但是我似乎找不到任何东西。谢谢你的帮助。

最佳答案

您可以使用交替的正则表达式将多个-like测试替换为一个-match测试:

$csv = Import-Csv "${filepath}\temp1.csv"
$csv | Where-Object {$_.location -match  '^(co|cc|dc|mf)'} |
   select EmployeeNumber |
   Export-Csv "${filepath}\disablelist.csv" -NoTypeInformation

您可以从字符串数组构建该正则表达式:
$locations = 'co','cc','dc','mf'
$LocationMatch = '^({0})' -f ($locations -join '|')

$csv = Import-Csv "${filepath}\temp1.csv"
$csv | Where-Object { $_.location -match  $LocationMatch } |
   select EmployeeNumber |
   Export-Csv "${filepath}\disablelist.csv" -NoTypeInformation

关于powershell - 可以结合使用.csv where-object过滤器吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26069711/

10-11 22:34
查看更多