PowerShell 高级排序文件名



我们有文件:

CP1-GC1.dem
CP1-GC2.dem
CP1-GC3.dem 
CP5-GC1.dem
CP5-GC4.dem 
CP5-GC3.dem

如何获取具有最大"GC"编号的文件?

一个更像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

如果您将文件名读取到数组中并循环访问它们,我会做这样的事情:

$files = "CP1-GC1.dem
CP1-GC2.dem
CP1-GC3.dem 
CP5-GC1.dem
CP5-GC4.dem 
CP5-GC3.dem" -split "rn"
$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变量。

您将能够调整上述代码以满足您的需求。

最新更新