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,也可以颠倒顺序使其比较数字,因为数字的长度不同(请参见我答案注释中的图片)