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

如何在PowerShell中获取日期值最大的备份文件?

获取日期值最大的备份文件(PowerShell)

问题场景

现有备份文件列表:

BACKUP-20220114.BAK
BACKUP-20220118.BAK
BACKUP-20220120.BAK

尝试通过以下命令获取日期值最大的文件时触发错误:

ls BACKUP* | select-object -Property Name | Measure-Object -Maximum

错误提示:

Measure-Object : Cannot compare "@{Name=BACKUP-20221028.bak}" because it is not IComparable.

错误原因

你用Select-Object -Property Name输出的是包含Name属性的自定义对象,不是纯字符串类型,Measure-Object无法对这类对象执行最大值比较操作,所以报错。不需要特意让字符串具备IComparable特性,换下面的处理方式即可解决。

解决方法

方法1:直接基于文件名字符串排序(简单高效)

文件名的日期部分是yyyyMMdd格式,字符串排序结果和日期大小顺序一致,直接排序后取第一个(降序):

# 获取最新备份文件的名称
(Get-ChildItem BACKUP* | Sort-Object Name -Descending)[0].Name

# 如果需要获取完整的文件对象(比如后续要复制/删除)
Get-ChildItem BACKUP* | Sort-Object Name -Descending | Select-Object -First 1

或者用Measure-Object处理纯字符串:

(Get-ChildItem BACKUP*).Name | Measure-Object -Maximum | Select-Object -ExpandProperty Maximum

方法2:提取日期转为日期类型比较(更严谨)

如果担心未来文件名前缀或格式变化,可从文件名中提取日期转为DateTime类型再比较,结果更可靠:

Get-ChildItem BACKUP* | ForEach-Object {
    # 从文件名中提取日期段:拆分"-"和".",取中间的数字部分
    $dateStr = $_.Name -replace 'BACKUP-(\d+)\.BAK', '$1'
    $date = [DateTime]::ParseExact($dateStr, 'yyyyMMdd', $null)
    # 输出包含文件和日期的对象
    [PSCustomObject]@{
        File = $_
        BackupDate = $date
    }
} | Sort-Object BackupDate -Descending | Select-Object -First 1 -ExpandProperty File

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 11:40:30