簡體   English   中英

在Powershell中按版本號對文件進行排序

[英]Files sorting with version number in 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 ,腳本應獲取該文件夾

您可以嘗試以下類似的方法

$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

差不多了 當我嘗試運行您的代碼時,遇到兩個錯誤。 首先,在行尾有一個額外的')',導致語法錯誤。 其次,您的“ SubString()”調用失敗,因為您試圖獲取不帶第四個字符(“ CD1”)的字符串的第三個和第四個字符。 但是,您不需要腳本塊來執行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來省略{} 並且它對Select-Object使用-ExpandProperty參數,因此您不必將整個內容包裝在parens中即可獲得Name屬性。

您可以嘗試以下方法:

#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包含您要查找的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM