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

使用PowerShell处理含版本号文件:分组保留最新版本并删旧版

用PowerShell批量保留最新版本文件并删除旧版本

需求说明

需要处理一批带版本号的文件,按文件名前缀分组,仅保留每组中的最新版本文件,删除其余旧版本。示例文件:

FileBam-0.10.1.zip
FileBam-0.2.0.zip
FileBoozle-1.7.2.zip
FileBoozle-1.7.5.zip
FileBoozle-1.7.10.zip
FileWam-0.97.40.zip
OtherFile-5.5.zip

解决方案脚本

# 替换为你的目标文件目录
$targetDir = "C:\Your\Target\Directory"

# 遍历文件、提取前缀和版本号,再分组处理
Get-ChildItem -Path $targetDir -Filter "*.zip" | ForEach-Object {
    # 匹配前缀(-之前的内容)和版本号(数字+点的组合)
    if ($_.BaseName -match '^(.+?)-(\d+\.\d+(\.\d+)?)$') {
        [PSCustomObject]@{
            File    = $_
            Prefix  = $matches[1]
            Version = [version]$matches[2]
        }
    }
} | 
# 按前缀分组
Group-Object -Property Prefix | 
# 只保留包含2个及以上文件的分组
Where-Object { $_.Count -ge 2 } | 
ForEach-Object {
    # 按版本号降序排序,跳过第一个(最新版本),删除剩余旧文件
    $_.Group | Sort-Object Version -Descending | Select-Object -Skip 1 | ForEach-Object {
        # 先打印待删除文件路径(用于验证)
        Write-Host "待删除旧版本: $($_.File.FullName)"
        # 确认无误后,注释掉上面的Write-Host,启用下面的删除命令
        # Remove-Item -Path $_.File.FullName -Force
    }
}

关键细节说明

  1. 正则匹配规则:^(.+?)-(\d+\.\d+(\.\d+)?)$ 精准匹配-分隔的前缀和版本号,支持两位(如5.5)或三位(如0.10.1)版本格式。
  2. 版本号正确排序:将提取的版本号转为[version]类型,避免字符串排序的错误(比如0.10.1字符串排序会比0.2.0小,但实际版本更高)。
  3. 安全验证:脚本默认只打印待删除文件路径,确认无误后再启用Remove-Item命令,防止误删。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 18:52:34