在Powershell中使用版本号进行排序的文件

时间:2015-05-29 20:56:02

标签: 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,脚本应该获取该文件夹

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

你几乎拥有它。当我试图运行你的代码时,我遇到了两个错误。首先,你有一个额外的')'在行的末尾导致语法错误。其次,你的子串()'呼叫失败是因为您试图获取没有第4个字符的字符串的第3个和第4个字符(" CD1")。但是,您不需要使用Sort命令的脚本块。您只需在“名称”字段中进行排序即可。

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

作为旁注,这会使用Where-ObjectSort-Object的PowerShell 3语法来省略{}。它使用-ExpandProperty参数Select-Object,因此您不必将整个内容包装在parens中以获取Name属性。

答案 2 :(得分: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包含您正在寻找的内容。