PowerShell导入CSV筛选特定日期格式问题求助
问题分析与解决方案
嘿,我来帮你捋清楚这个问题的根源和解决办法~
为什么当前代码不生效?
你遇到的问题核心是对PowerShell中-Like/-NotLike运算符的理解有误:
- 这两个运算符是通配符匹配,不是简单的字符包含判断。当你直接写
-NotLike "-"时,PowerShell会认为你要筛选**整个"Date Of Birth"字段完全等于"-"**的记录,而你的数据里显然没有这样的行,所以返回空结果。 - 当你设置
$SearchFor = "/"时,-NotLike "/"会排除那些字段值完全是"/"的记录,但你的CSV里没有这种数据,所以自然返回了所有行。
正确的筛选方法
方法1:用通配符实现字符包含判断
如果只是简单区分包含"-"还是"/"的日期,给搜索字符串加上通配符*(代表任意长度的任意字符)即可:
# 筛选格式为yyyy-MM-dd(包含"-")的记录 Import-CSV C:\Test\TestFile.csv | Where-Object { $_.'Date Of Birth' -like "* -*" } # 或者反过来,排除包含"/"的记录,效果一样 Import-CSV C:\Test\TestFile.csv | Where-Object { $_.'Date Of Birth' -notlike "*/*" }
方法2:用正则表达式精准匹配格式
如果你想严格确保是yyyy-MM-dd的日期格式(避免字段里有其他"-"但不是日期的情况),推荐用-Match运算符搭配正则表达式:
Import-CSV C:\Test\TestFile.csv | Where-Object { $_.'Date Of Birth' -match '^\d{4}-\d{2}-\d{2}$' }
这个正则表达式的意思是:
^:匹配字符串开头\d{4}:匹配4位数字(年份)-:匹配连字符\d{2}:匹配2位数字(月份/日期)$:匹配字符串结尾
这样能精准筛选符合标准日期格式的记录。
内容的提问来源于stack exchange,提问作者Fler
相关产品推荐
相关产品推荐

