2015-05-29 18 views
0

我在目錄中有此文件夾。有不同的版本。使用Powershell中的版本號進行排序的文件

CD1,CD2,CD3,CD4,CD5,CD6,CD7,CD8,CD9,CD11,CD12 

我是新來的powershell,任何人都可以幫助我從上述文件夾中獲取最新版本的文件夾?這裏CD12是最新的文件夾。我無法使用上次修改時間,因爲我同時複製它們。

$FolderName=(Get-ChildItem C:\Current\CD |Where-Object {$_.name -like "*CD*"}| sort{$_.name.Substring(2,2)}|Select-Object Name -Last 1).Name) 
Write-Host "$FolderName" 

我試過上面的腳本,它沒有幫助。誰能幫我? 下一個新版本是CD13,和腳本應該得到該文件夾​​

+0

當你說「獲取最新版本」時,你的意思是編號最高的子文件夾,還是最近修改的子文件夾或其他標準? –

+0

是的,編號最高的文件夾,在本例中爲「CD12」。 – user3566201

回答

0

你可以嘗試像下面

$max_version = Get-ChildItem "C:\Current\" | Where-Object {$_.PSIsContainer} 
| Foreach-Object {$_.Name} | Foreach-object {$_ -replace "CD", ""} 
| measure -maximum | Select-Object -expand Maximum 

Write-host ("CD" + $max_version) 

這將導致在CD12

0

你幾乎有它。當我試圖運行你的代碼時,我遇到了兩個錯誤。首先,你在行尾有一個額外的')',導致語法錯誤。其次,您的'SubString()'調用失敗,因爲您試圖獲取沒有第四個字符(「CD1」)的字符串的第3個和第4個字符。不過,您不需要將腳本塊用於Sort命令。您可以在名稱字段進行排序。

$FolderName = Get-ChildItem C:\7005\Hot-Fix\CD | where Name -like "CD*" | sort Name | Select-Object -Last 1 -ExpandProperty Name 

作爲一個側面說明,這種使用PowerShell的3語法Where-ObjectSort-Object省略{}。它使用-ExpandProperty參數到Select-Object,所以你不必將所有的東西包裝到parens中來獲得Name屬性。

0

你可以試試這個:

#requires -v 3 
$baseFolder='C:\7005\Hot-Fix\CD' 
$folder=dir $baseFolder\CD* -Directory | 
    ? basename -CMatch 'CD\d{1,}' | 
    sort @{e={'{0:0000}' -f [int]($_ -replace '\D')}} -Descending | 
    select -First 1 

通知,我考慮區分大小寫的匹配;另外,$folder包含您正在尋找。

相關問題