2014-01-16 130 views
0

我希望做在PowerShell中文件的數組以下(僞SQL表示)來獲取組完成選擇組對象最大

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

我可以用group-object cmdlet的,但如何我可以得到最大的位?

注意也許Measure-Object cmdlet的,但我似乎無法得到它的處理組

回答

1

下面給出您的意見,我想你的文件列表來自遞歸文件搜索和你到底爲每個文件名需要最新文件的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 

我們可以看到,以獲得最新的文件對每個文件名,我們希望從子文件夾,並從FILE2.TXT和FILE1.TXT file3.txt C:\ temp根目錄文件夾。

然後運行以下命令:

$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。

+0

這使我得到文件名和最後創建的日期,但不是文件本身。有沒有辦法做到這一點? – soandos

+0

不完全確定你的意思是「文件本身」。如果您的意思是使用UTF8編碼讀取文件的文本,則可以在最後一行的末尾添加如下內容(不包括<< and >>,但包括逗號):<<,@ {N =「FileContents」; E = {Get-Content -Encoding UTF8 -Path $ _。Name}} >> –

+0

當我說文件本身時,我的意思是一個對象,我可以(例如)'.Path'或'.FullName'等該文件(其中有最大最後創建日期) – soandos