windows 如何选择指定文件中数量最多的文件

xkftehaa  于 2023-02-13  发布在  Windows
关注(0)|答案(1)|浏览(135)

我想使用powershell在文件夹中只保留指定zip文件的最大版本的文件。我写了一个shell脚本,但它返回了所有文件。我如何修改脚本以只选择最大版本的文件?

$files = Get-ChildItem -Filter "*.zip"

$max = $files |Measure-Object -Maximum| ForEach-Object {[int]($_.Split("_")[-1].Split(".")[0])}
$largestFiles = $files | Where-Object {[int]($_.Split("_")[-1].Split(".")[0]) -eq $max}
Write-Output $largestFiles

期望值:

A1_Fantasic_World_20.zip
A1_Fantasic_World_21.zip
B1_Mythical_Realms_11.zip
B1_Mythical_Realms_12.zip
C1_Eternal_Frame_Corporation_2.zip
C1_Eternal_Frame_Corporation_3.zip
↓
A1_Fantasic_World_21.zip
B1_Mythical_Realms_12.zip
C1_Eternal_Frame_Corporation_3.zip

A1_Fantasic_World的最大数字是21。B1_Mythical_Realms的最大数字是12。C1_Eternal_Frame_Corporation的最大数字是3。所以我想选择最大的zip版本。

pgvzfuti

pgvzfuti1#

首先,将计算的属性添加到用于过滤的文件系统对象中,然后使用Group-ObjectSort-ObjectSelect.Object的组合过滤所需的文件。

$FileList =
Get-ChildItem -Filter *.zip |
Select-Object -Property *,
@{
    Name       = 'Title'
    Expression = {($_.BaseName -split '_')[0..$(($_.BaseName -split '_').count - 2)] -join '_' }
},
@{
    Name       = 'Counter'
    Expression = {[INT]($_.BaseName -split '_')[-1]}
}

$LastOnesList =
$FileList |
Group-Object -Property Title |
ForEach-Object {
    $_.Group | Sort-Object -Property Counter | Select-Object -Last 1
}
$LastOnesList |
Select-Object -Property Name

相关问题