gpt4 book ai didi

powershell-3.0 - 从组对象中选择最大值

转载 作者:行者123 更新时间:2023-12-04 16:31:42 31 4
gpt4 key购买 nike

我希望对 powershell 中的文件数组执行以下操作(以伪 SQL 表示)

select NAME, max(lastcreatedDate) from listOfFiles
group by NAME

我可以使用 group-object cmdlet 来完成组,但是如何获得最大位?

注意也许是 Measure-Object cmdlet,但我似乎无法让它处理组

最佳答案

鉴于您在下面的评论,我猜您的文件列表来自递归文件搜索,最后您想要每个文件名的最新文件的 FileInfo 对象。请更新您的问题(除了您已经拥有的内容外,至少包括预期的输入(如果我的猜测是正确的,它是从 Get-ChildItem -Recurse -File 给出的文件列表)并请求输出(同样,我的猜测是您希望每个文件名的最新文件都有一个 FileInfo 对象,如果其他子文件夹中存在旧文件,则不重复),以便将来的读者知道我的猜测是否正确。

鉴于我已正确理解您的方案,我可能会按名称分组,然后在组列表中执行 Foreach 以从每个组中选择最新的文件。为了测试它,我创建了一个如下所示的文件结构:

    Directory: C:\temp


Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2014-01-18 14:13 0 file1.txt
-a--- 2014-01-18 14:19 2 file2.txt


Directory: C:\temp\subfolder


Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2014-01-18 14:14 2 file1.txt
-a--- 2014-01-18 14:14 1 file2.txt
-a--- 2014-01-18 14:14 0 file3.txt

如我们所见,要获取每个文件名的最新文件,我们需要子文件夹中的 file1.txt 和 file3.txt 以及 C:\temp 根文件夹中的 file2.txt。

然后运行以下命令:

$files = Get-ChildItem -Path "C:\temp" -Recurse -File

$newestFiles = $files | Group Name | Foreach { $_.Group | Sort CreationTime -Descending | Select -First 1 }
$newestFiles

它给出了以下输出:

    Directory: C:\temp\subfolder


Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2014-01-18 14:14 2 file1.txt


Directory: C:\temp


Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2014-01-18 14:19 2 file2.txt


Directory: C:\temp\subfolder


Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 2014-01-18 14:14 0 file3.txt

这是我们想要的输出。 $newestFiles 中的每个项目都是一个 FileInfo 对象,因此它们具有 FileInfo 对象的所有属性,例如 FullName 和 CreationTime。

关于powershell-3.0 - 从组对象中选择最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21152447/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com