如何用PowerShell筛选同系列ZIP文件的最大版本文件
解决PowerShell按系列保留ZIP文件最大版本的问题
你的原脚本问题在于直接计算了所有文件的全局最大版本号,导致只能筛选出所有等于这个全局最大值的文件,而不是每个系列各自的最大版本。下面是修改后的脚本,实现按前缀系列分组并保留每组的最大版本文件:
# 获取目标文件夹下所有ZIP文件 $files = Get-ChildItem -Filter "*.zip" # 按文件系列分组:提取文件名中最后一个下划线前的部分作为分组键 $fileGroups = $files | Group-Object -Property { $parts = $_.BaseName.Split("_") # 拼接除最后一个元素外的所有部分,得到系列名 $parts[0..($parts.Count - 2)] -join "_" } # 遍历每个分组,筛选出当前组内版本号最大的文件 $largestFiles = $fileGroups | ForEach-Object { # 对当前组的文件按版本号降序排序,取第一个(即最大版本) $_.Group | Sort-Object -Property { [int]($_.BaseName.Split("_")[-1]) } -Descending | Select-Object -First 1 } # 输出每个系列的最大版本文件 Write-Output $largestFiles
关键修改说明:
- 使用
Group-Object按系列名分组,系列名通过拆分文件名并去掉最后一个版本号部分得到 - 对每个分组内部的文件,按版本号转换为整数后降序排序,取第一个即为该系列的最大版本文件
- 用
BaseName(不带扩展名的文件名)处理,避免拆分扩展名的额外步骤
测试你给出的文件名列表,脚本会正确输出:A1_Fantasic_World_21.zip、B1_Mythical_Realms_12.zip、C1_Eternal_Frame_Corporation_3.zip
内容的提问来源于stack exchange,提问作者92rwf0lXXW4m
相关产品推荐
相关产品推荐

