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

如何用PowerShell删除旧文件仅保留最新3份副本?

在PowerShell中按前缀分组保留最新3份文件并删除旧文件

对应Bash命令的直接实现

如果你只想手动处理指定前缀的文件(比如A.*.txt和B.*.txt),可以用以下PowerShell命令,逻辑和你给出的Bash命令完全对应:

处理A前缀的文件

# 先预览要删除的文件,确认无误后去掉 -WhatIf 执行实际删除
Get-ChildItem -Path "A.*.txt" | Sort-Object LastWriteTime -Descending | Select-Object -Skip 3 | Remove-Item -WhatIf

处理B前缀的文件

Get-ChildItem -Path "B.*.txt" | Sort-Object LastWriteTime -Descending | Select-Object -Skip 3 | Remove-Item -WhatIf

自动按前缀分组批量处理

如果有很多不同前缀的文件(比如C.*、D.*等),可以自动按文件名的前缀(第一个.之前的部分)分组处理,无需逐个编写命令:

Get-ChildItem -Path "*.txt" | 
    Group-Object -Property { $_.Name.Split('.')[0] } | 
    ForEach-Object {
        # 每组内按修改时间降序排序,跳过最新3个,删除剩余文件
        $_.Group | Sort-Object LastWriteTime -Descending | Select-Object -Skip 3 | Remove-Item -WhatIf
    }

特殊情况:按文件名中的版本号排序

如果你的文件“时间戳”实际是文件名里的版本号(比如A.9.2.txt的9.2),而非文件的修改时间,需要按版本号规则排序而非修改时间,这时候可以用版本类型解析实现精准排序:

# 处理A前缀的版本号命名文件
Get-ChildItem -Path "A.*.txt" | 
    Sort-Object -Property { 
        # 提取文件名中的版本部分并转为Version类型,确保版本号正确排序
        [version]($_.Name -replace '^A\.|\.txt$', '') 
    } -Descending | 
    Select-Object -Skip 3 | 
    Remove-Item -WhatIf

关键参数说明

  • Sort-Object LastWriteTime -Descending:按文件最后修改时间从新到旧排序(对应Bash的ls -t)
  • Select-Object -Skip 3:跳过前3个最新的文件,仅保留这些
  • -WhatIf:预览删除操作,不会实际删除文件,确认要删除的文件正确后再移除该参数执行删除

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 06:40:29