powershell推进排序文件名

时间:2017-08-09 20:46:14

标签: powershell sorting

我们有文件:

CP1-GC1.dem
CP1-GC2.dem
CP1-GC3.dem 

CP5-GC1.dem
CP5-GC4.dem 
CP5-GC3.dem

如何获取最大的文件" GC"号码?

2 个答案:

答案 0 :(得分:2)

更像PowerShell的解决方案:

gci *.dem|Sort {$_.Basename.split('-')[1,0]}|Select -Last 1

或详细:

Get-ChildItem -Filter *.dem | 
  Sort-Object {$_.Basename.split('-')[1,0]} |
    Select-Object -Last 1

结果:

PS A:\>  gci *.dem|Sort {$_.Basename.split('-')[1,0]}|Select -last 1

    Directory: A:\

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----        08/9/2017     23:37              8 CP5-GC4.dem

如果数字可能有不同的长度,则有一个解决方案,左边的数字为零reference
有点复杂;-)但仍然是一个班轮。

gci *.dem|sort {[Regex]::Replace($($_.Basename.split('-')[1,0]), '\d+',{$args[0].Value.PadLeft(10, '0') }) }|Select -Last 1

答案 1 :(得分:0)

如果你正在将文件名读入数组并循环遍历它们,我会做这样的事情:

$files = "CP1-GC1.dem
CP1-GC2.dem
CP1-GC3.dem 
CP5-GC1.dem
CP5-GC4.dem 
CP5-GC3.dem" -split "\r\n"

$hn = 0
$hfn = ""

foreach($e in $files)
{
    if($e.SubString(6,1) -gt $hn)
    {
        $hn = $e.SubString(6,1)
        $hfn = $e
    }
}

Write-Host $hn
Write-Host $hfn

这将通过使用SubString()查找字符串中的特定字符来写出文件的最高编号和名称。然后,它会将其与目前为止的最高数字$hn进行比较,并在每次找到更高的数字时调整最高文件名$hfn变量。

您可以调整上述代码以满足您的需求。