我有包含文件的文件夹,出于问题的原因,命名如下:
a-001.txt
a-002.txt
b-001.txt
b-002.txt
d-001.txt
d-002.txt
现在我使用PowerShell初始订购这些文件,以便列表顶部是文件夹中的最新文件:
d-002.txt
b-002.txt
a-001.txt
a-002.txt
b-001.txt
d-001.txt
编辑:然后我将最近X
个最近的文件存储到变量中。但是,我想忽略以A
开头的任何内容,如果我已经在我的数组中以A
开头,但仍然确保我最终获得最新的X
个文件。即从上面来看,如果X was 4
,我希望以下结尾。
d-002.txt
b-002.txt
a-001.txt
b-001.txt
这是一个简单的例子,我正在处理的文件夹包含1000个文件 - 具有更复杂的命名约定但逻辑是相同的。如何在PowerShell中处理此问题?
答案 0 :(得分:2)
删除已经解决的任何其他Sort-Object
和Select-Object
条件的逻辑我将提供以下内容。
Get-ChildItem $somePath | Select-Object *,@{Label="Prefix";Expression={(($_.Name) -Split "-",2)[0]}} | Group-Object prefix | ForEach-Object{
$_.Group | Select-Object -First 1 -Property Fullname
}
这里发生的是我们在名为“Prefix”的Get-ChildItem
输出中添加一个属性。现在,您的标准可能会更复杂,但考虑到样本,我假设文件在第一个“ - ”之前按名称的内容进行分组。因此我们采用每个文件名并基于此构建其前缀。魔法来自Group-Object
,它将对所有项目进行分组,然后我们只选择第一个项目。在你的情况下,这将是最新的X金额。如果你在整合这个问题时让我知道。
除了在上面的示例中对Select-Object
之前的任何排序以及不需要存在的任何排序之外,还要对逻辑进行分组。
其他读者的费用
OP的实际数据存在问题,因为上面的代码并没有完全正常工作。我们在聊天中使用了相同的逻辑,我们能够解决OP的问题。问题中的测试数据和我的答案按预期工作。