You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PowerShell筛选名称含yyyy-MM-dd格式日期的CSV文件?

解决PowerShell筛选含yyyy-MM-dd格式日期的CSV文件问题

原代码无效的原因

  1. -Filter参数的局限:你使用的*yyyy-MM-dd.csv是文件系统原生通配符,它会字面匹配文件名中包含"yyyy-MM-dd"这串固定字符的文件,而非符合日期格式的文件,自然找不到2022-01-15.csv这类实际日期命名的文件。
  2. Where-Object的可能错误:如果之前用Where-Object没成功,大概率是正则表达式写法有误,没正确匹配日期格式的字符规则。

正确实现方法

基础版:匹配日期格式的文件名

用Where-Object结合正则表达式,精准匹配文件名中的yyyy-MM-dd格式:

# 情况1:仅匹配纯日期命名的CSV(如2022-01-15.csv)
Get-ChildItem -Path "C:\csv files" -Filter "*.csv" | Where-Object { $_.Name -match '^\d{4}-\d{2}-\d{2}\.csv$' }

# 情况2:匹配文件名任意位置包含日期的CSV(如sales_2022-01-15.csv)
Get-ChildItem -Path "C:\csv files" -Filter "*.csv" | Where-Object { $_.Name -match '\d{4}-\d{2}-\d{2}' }

正则规则解释:

  • \d{4}:匹配4位年份数字
  • -\d{2}-:匹配短横线分隔的两位月份、日期数字
  • ^\和$:限定匹配整个文件名(仅纯日期命名时需要)
  • \.csv$:转义点号,精准匹配CSV后缀

进阶版:验证日期有效性

如果需要排除2022-13-32这类格式正确但无效的日期,可以在筛选中增加日期合法性验证:

Get-ChildItem -Path "C:\csv files" -Filter "*.csv" | Where-Object {
    if ($_.BaseName -match '^\d{4}-\d{2}-\d{2}$') {
        [DateTime]::TryParseExact($matches[0], 'yyyy-MM-dd', $null, [System.Globalization.DateTimeStyles]::None, [ref]$null)
    }
}

补充提示

-Filter仅适合简单的前缀/后缀匹配(如*.csv),复杂格式筛选优先用Where-Object+正则表达式,功能更灵活可靠。

内容的提问来源于stack exchange,提问作者Walter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 17:45:36