PowerShell使用-or筛选CSV多值 导出空文件问题求助
问题原因
你的过滤写法逻辑完全错了。
PowerShell 括号优先级最高,会先算括号内的('de' -or 'at'):两个非空字符串做逻辑或运算,结果固定是布尔值$true,所以你实际执行的过滤逻辑是where Country -Like $true。Country字段存的是国家代码字符串,不可能匹配上布尔值,自然返回空结果,而且这段代码语法完全合法,所以运行时不会报任何错。
另外你是精确匹配固定国家代码,根本没必要用-Like,用等值判断-eq性能更好。
正确写法
写法1:按-or的规范语法写
-or是用来连接两个独立判断语句的,不能把多个要匹配的值打包塞在比较运算符右边,正确代码:
Import-Csv .\temp.csv -encoding utf8 | where { $_.Country -eq 'de' -or $_.Country -eq 'at' } | Export-Csv .\new-de-at.csv -encoding utf8 -NoTypeInformation
如果后续需要做带通配符的模糊匹配,把代码里的-eq换成-Like即可。
写法2:用-in运算符(推荐,扩展性好)
如果之后要加更多国家代码,堆一串-or会非常啰嗦,直接用-in判断字段值是否在给定的取值列表里就行:
Import-Csv .\temp.csv -encoding utf8 | where Country -in 'de','at' | Export-Csv .\new-de-at.csv -encoding utf8 -NoTypeInformation
后续要新增匹配项(比如瑞士ch),直接在列表里加值就行,改成'de','at','ch'即可,不用改判断逻辑。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

