如何在PowerShell中对含DDMMYYYY日期戳的文件名按时间排序?
解决PowerShell中按文件名内嵌日期排序的问题
针对文件名格式为N_DDMMYYYY.txt的文件排序需求,核心是提取文件名中的日期字符串并转换为DateTime对象,以此作为排序依据,而非依赖文件创建时间或字符串排序。
具体实现代码
# 替换为你的文件所在路径 $targetPath = "C:\统计文件" Get-ChildItem -Path $targetPath -Filter "*.txt" | Sort-Object -Property @{ # 提取并转换日期为DateTime对象,作为第一排序键 Expression = { # 正则匹配提取DDMMYYYY部分 $dateSegment = $_.Name -replace '^\d+_(\d{8})\.txt$', '$1' # 按指定格式解析为日期 [DateTime]::ParseExact($dateSegment, 'ddMMyyyy', $null) } }, @{ # 提取主机编号并转为整数,作为第二排序键(同一日期下按主机号排序) Expression = { [int]($_.Name -replace '^(\d+)_.*$', '$1') } } | Select-Object -ExpandProperty Name
代码说明
- 日期提取与转换:通过正则表达式
^\d+_(\d{8})\.txt$匹配文件名,捕获_后的8位日期字符串,再用ParseExact按ddMMyyyy格式解析为DateTime对象,确保排序遵循真实日期逻辑。 - 主机号排序:提取
_前的主机编号并转为整数,避免字符串排序导致的10排在2之前的问题。 - 输出文件名:通过
Select-Object -ExpandProperty Name仅输出排序后的文件名列表,若需要完整文件对象可移除该部分。
内容的提问来源于stack exchange,提问作者Al_1-103
相关产品推荐
相关产品推荐

