Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
powershell高级排序文件名_Powershell_Sorting - Fatal编程技术网

powershell高级排序文件名

powershell高级排序文件名,powershell,sorting,Powershell,Sorting,我们有以下文件: CP1-GC1.dem CP1-GC2.dem CP1-GC3.dem CP5-GC1.dem CP5-GC4.dem CP5-GC3.dem 如何获取“GC”编号最大的文件?如果将文件名读入数组并循环遍历,我会执行以下操作: $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 = "" fore

我们有以下文件:

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

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

如何获取“GC”编号最大的文件?

如果将文件名读入数组并循环遍历,我会执行以下操作:

$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()查找字符串中的特定字符,将写出文件的最大数字和名称。然后,它将其与迄今为止的最高数字进行比较,并在每次找到更高的数字时调整最高文件名
$hfn
变量


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

一个更像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
如果数字可能具有不同的长度,则有一种解决方案,即用零左键填充数字
稍微复杂一点;-)但仍然是一个班轮

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

我们可以看看你的代码吗?看起来我找到了解决方案,而且比50行代码简单多了。你太棒了,非常感谢!首先使用字符串的if将使其成为字符串比较,可以转换为int,也可以颠倒顺序使其比较数字,因为数字的长度不同(请参见我答案注释中的图片)