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

如何在PowerShell中对含日期的文本文件进行排序?

问题描述

我是PowerShell新手,手里有个包含文件列表(带修改日期)的HTML格式文本文件,想在PowerShell里对这些文件按修改日期排序,但试了下面两个命令都没效果:

Get-Content -Path C:\toBeDeleted\Output.txt |Sort-Object LastWriteTime -Descending
Get-Content -Path C:\toBeDeleted\Output.txt |Sort-Object { [int] $_ }

文本文件内容如下:

<!DOCTYPE html>
<html>
<head><meta name="robots" content="noindex" />
<title>Index of pme-modernization/ModuleBuilder/develop</title>
</head>
<body>
<h1>Index of pme-modernization/ModuleBuilder/develop</h1>
<pre>Name                                                             Last modified      Size</pre><hr/>
<pre><a href="../">../</a>
<a href="jenkins-ModuleBuilder-develop-100_BuildOutput.zip">jenkins-ModuleBuilder-develop-100_BuildOutput.zip</a>                 05-Jul-2023 10:28  16.76 MB
<a href="jenkins-ModuleBuilder-develop-100_BuildOutput.zip_BuildInfo.txt">jenkins-ModuleBuilder-develop-100_BuildOutput.zip_BuildInfo.txt</a>   05-Jul-2023 10:28  758 bytes
<a href="jenkins-ModuleBuilder-develop-101_BuildOutput.zip">jenkins-ModuleBuilder-develop-101_BuildOutput.zip</a>                 07-Jul-2023 04:49  16.76 MB
<a href="jenkins-ModuleBuilder-develop-101_BuildOutput.zip_BuildInfo.txt">jenkins-ModuleBuilder-develop-101_BuildOutput.zip_BuildInfo.txt</a>   07-Jul-2023 04:49  758 bytes
<a href="jenkins-ModuleBuilder-develop-102_BuildOutput.zip">jenkins-ModuleBuilder-develop-102_BuildOutput.zip</a>                 10-Jul-2023 08:49  18.30 MB
<a href="jenkins-ModuleBuilder-develop-102_BuildOutput.zip_BuildInfo.txt">jenkins-ModuleBuilder-develop-102_BuildOutput.zip_BuildInfo.txt</a>   10-Jul-2023 08:49  758 bytes
<a href="jenkins-ModuleBuilder-develop-103_BuildOutput.zip">jenkins-ModuleBuilder-develop-103_BuildOutput.zip</a>                 17-Jul-2023 06:44  18.30 MB
<a href="jenkins-ModuleBuilder-develop-103_BuildOutput.zip_BuildInfo.txt">jenkins-ModuleBuilder-develop-103_BuildOutput.zip_BuildInfo.txt</a>   17-Jul-2023 06:45  758 bytes
<a href="jenkins-ModuleBuilder-develop-104_BuildOutput.zip">jenkins-ModuleBuilder-develop-104_BuildOutput.zip</a>                 20-Jul-2023 16:22  18.31 MB
<a href="jenkins-ModuleBuilder-develop-104_BuildOutput.zip_BuildInfo.txt">jenkins-ModuleBuilder-develop-104_BuildOutput.zip_BuildInfo.txt</a>   20-Jul-2023 16:22  758 bytes
<a href="jenkins-ModuleBuilder-develop-105_BuildOutput.zip">jenkins-ModuleBuilder-develop-105_BuildOutput.zip</a>                 24-Jul-2023 12:02  18.31 MB
<a href="jenkins-ModuleBuilder-develop-105_BuildOutput.zip_BuildInfo.txt">jenkins-ModuleBuilder-develop-105_BuildOutput.zip_BuildInfo.txt</a>   24-Jul-2023 12:03  758 bytes
<a href="jenkins-ModuleBuilder-develop-106_BuildOutput.zip">jenkins-ModuleBuilder-develop-106_BuildOutput.zip</a>                 24-Jul-2023 13:53  18.31 MB
<a href="jenkins-ModuleBuilder-develop-106_BuildOutput.zip_BuildInfo.txt">jenkins-ModuleBuilder-develop-106_BuildOutput.zip_BuildInfo.txt</a>   24-Jul-2023 13:54  758 bytes
<a href="jenkins-ModuleBuilder-develop-107_BuildOutput.zip">jenkins-ModuleBuilder-develop-107_BuildOutput.zip</a>                 25-Jul-2023 06:30  18.31 MB
<a href="jenkins-ModuleBuilder-develop-107_BuildOutput.zip_BuildInfo.txt">jenkins-ModuleBuilder-develop-107_BuildOutput.zip_BuildInfo.txt</a>   25-Jul-2023 06:30  758 bytes
<a href="jenkins-ModuleBuilder-develop-108_BuildOutput.zip">jenkins-ModuleBuilder-develop-108_BuildOutput.zip</a>                 26-Jul-2023 13:42  20.59 MB
<a href="jenkins-ModuleBuilder-develop-108_BuildOutput.zip_BuildInfo.txt">jenkins-ModuleBuilder-develop-108_BuildOutput.zip_BuildInfo.txt</a>   26-Jul-2023 13:42  758 bytes
<a href="jenkins-ModuleBuilder-develop-109_BuildOutput.zip">jenkins-ModuleBuilder-develop-109_BuildOutput.zip</a>                 27-Jul-2023 09:29  20.59 MB
</pre>
</body>
</html>
解决方案

之前的命令无效原因很明确:

  • Sort-Object LastWriteTime:Get-Content输出的是纯文本行,这些行没有LastWriteTime属性,参数完全不生效。
  • Sort-Object { [int] $_ }:尝试把整行转成整数,但每行是带HTML标签和日期的字符串,根本无法转换,排序逻辑错误。

要实现按修改日期排序,需要先提取有效行的文件信息,把日期转换成可排序的DateTime对象,再执行排序,最后输出结果。

完整PowerShell脚本如下:

# 读取文件内容,过滤出包含实际文件链接和日期的有效行
$lines = Get-Content -Path C:\toBeDeleted\Output.txt | Where-Object {
    $_ -match '<a href="[^./].*?"' -and $_ -match '\d{2}-[A-Za-z]{3}-\d{4} \d{2}:\d{2}'
}

# 处理每一行,提取关键信息并转为可排序对象
$fileObjects = $lines | ForEach-Object {
    # 从HTML标签中提取文件名
    $fileName = [regex]::Match($_, '>([^<]+)</a>').Groups[1].Value.Trim()
    # 提取日期字符串并转为DateTime对象
    $dateStr = [regex]::Match($_, '\d{2}-[A-Za-z]{3}-\d{4} \d{2}:\d{2}').Value
    $lastWriteTime = [DateTime]::ParseExact($dateStr, 'dd-MMM-yyyy HH:mm', $null)
    
    # 返回包含原行和关键信息的自定义对象
    [PSCustomObject]@{
        FileName = $fileName
        LastWriteTime = $lastWriteTime
        OriginalLine = $_
    }
}

# 按修改日期降序排序(最新文件在前)
$sortedFiles = $fileObjects | Sort-Object LastWriteTime -Descending

# 输出排序后的原HTML格式行
$sortedFiles.OriginalLine

# 若需要更清晰的表格格式,可替换为下面的命令:
# $sortedFiles | Select-Object FileName, LastWriteTime | Format-Table -AutoSize

脚本说明

  1. 过滤有效行:跳过HTML结构行、标题行和../目录行,只保留带实际文件链接和日期的行。
  2. 转换日期格式:用正则提取日期字符串,转为DateTime对象——只有转为日期类型,才能按时间逻辑正确排序。
  3. 排序与输出:按修改日期降序排序后,可选择输出原HTML格式的行,或者输出整理后的表格格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 10:24:54