2017-05-25 140 views
0

我正在尝试查找目录中多个文件的最新版本。目前,我打电话给每个文件GCI,但这是非常缓慢的,所以我想改为缓存所有结果的唯一文件名,然后在缓存中执行查找。如何对字典进行分组和排序?

我目前做如下:

Gci $filePath -Recurse | ?{ -Not $_.PSIsContainer } | Group-Object Name 

我试图将其转换为PowerShell的等价的C#代码:

我将如何做到这一点在PowerShell中?

回答

1

我会做什么,以创建文件的哈希表将创建一个空的哈希表,然后用你的GCI的结果来填充它:

$files = ${} 
GCI $filepath -Recurse -File | Group Name | ForEach{ $files.Add($_.Name, ($_.Group | Sort LastWriteTime)) } 

或者,如果你想要的是最近的文件,在Sort LastWriteTime之后加| Select -Last 1。如果你关心的只是路径,你甚至可以做| Select -Last 1 -ExpandProperty FullName

$Files = ${} 
GCI $filepath -recurse | Group Name | ForEach{ $files.Add($_.Name, ($_.Group | Sort LastWriteTime | Select -Last 1 -ExpandProperty FullName)) } 
+0

原来,我实际上想出了同样的事情,因为我在等待答案,除了不同的语法。谢谢。 'Gci $ path -include $ extensions -Recurse | ?{-Not $ _。PSIsContainer} |组对象名称| %{$ cache [$ _。Name] =($ _。Group | Sort-Object LastWriteTime | Select-Object -Last 1).FullName}' – Lunyx

相关问题