PowerShell中使用数组搭配-Contains运算符筛选CSV数据失败排查
问题诊断与修复方案
咱们直接说问题出在哪,以及怎么改:
1. 数组定义的语法错误
你代码里的$Pets = "Dog", "Catn``写法有问题——末尾的n是错误的转义,会把换行符塞进数组的第二个元素里,而且语法不完整。正确的数组定义应该是直接用逗号分隔元素:
$Pets = "Dog", "Cat"
2. -Contains操作符的逻辑搞反了
PowerShell里的-Contains是检查「左侧的集合」是否包含「右侧的单个元素」,而不是反过来。你写的where Animal -Contains $Pets,是在判断Animal这个单个字段值能不能包含整个数组,这显然不符合你的需求,自然返回空结果。
修正后的两种可行写法:
方法1:用-In操作符(更直观)
-In刚好对应你的需求:检查单个字段值是否存在于目标数组中:
$Pets = "Dog", "Cat" Import-Csv -Path "C:\Users\User\deletingRows.csv" | Where-Object { $_.Animal -In $Pets } | Export-Csv -Path "C:\Users\User\Result.csv" -NoTypeInformation
方法2:调换-Contains的操作数位置
如果习惯用-Contains,把集合放在左边、字段值放在右边就行:
$Pets = "Dog", "Cat" Import-Csv -Path "C:\Users\User\deletingRows.csv" | Where-Object { $Pets -Contains $_.Animal } | Export-Csv -Path "C:\Users\User\Result.csv" -NoTypeInformation
补充一句:你之前用单个字符串能成功,是因为此时-Contains的行为和-eq类似,判断字段值是否等于单个字符串;但换成数组后逻辑就不成立了,所以必须调整操作符的方向或者改用-In。
内容的提问来源于stack exchange,提问作者user10210238
相关产品推荐
相关产品推荐

