如何使用Powershell脚本筛选文件名日期大于指定值的文件
PowerShell 文件名日期筛选脚本方案
实现逻辑
- 首先将指定的基准日期转换为DateTime类型便于比较
- 扫描目标路径下的所有文件,通过正则提取文件名中
YYYYMMDD格式的8位日期段 - 验证提取到的字符串为合法日期后,和基准日期做大小比较,仅保留日期晚于基准的文件
完整可运行脚本
# 配置基准日期 $baseDate = Get-Date "2021/11/28" # 配置需要扫描的文件所在文件夹路径,修改为你实际的路径即可 $scanPath = "." Get-ChildItem -Path $scanPath -File | Where-Object { # 匹配文件名中的8位连续数字日期 if ($_.Name -match '\b(\d{8})\b') { try { $fileDate = [DateTime]::ParseExact($matches[1], "yyyyMMdd", $null) return $fileDate -gt $baseDate } catch { # 匹配到的8位数字不是合法日期,直接过滤 return $false } } # 文件名无符合格式的日期,直接过滤 return $false } | ForEach-Object { # 输出格式和示例保持一致,带双引号 "`"$($_.Name)`"" }
适配优化说明
如果你的文件名格式固定为前缀_8位日期_后缀的结构,可以将正则匹配部分替换为字符串截取,运行效率更高:
# 替换Where-Object块内的内容即可 $datePart = $_.Name.Split('_')[1] try { $fileDate = [DateTime]::ParseExact($datePart, "yyyyMMdd", $null) return $fileDate -gt $baseDate } catch { return $false }
用提供的示例文件名运行上述脚本,输出结果和预期完全一致:
"abc_20211129_efg.*" "opq_20211130_rst.*"
内容的提问来源于stack exchange,提问作者Razz
相关产品推荐
相关产品推荐

