使用powershell查找文件名中编号最高的文件

使用powershell查找文件名中编号最高的文件,powershell,powershell-3.0,Powershell,Powershell 3.0,对不起,伙计们,我是新来的。如果有人在以下情况下提供帮助,那就太好了: 我在文件夹c:\test中有几个文件 sample.x.x.1 sample.x.x.2 sample.x.x.3 sample.x.x.4 sample.x.x.5 我想找到给定文件夹中名称中数字最大的文件名。在上面的示例中,5是最大的数字,脚本应将输出文件名返回为sample.x.x.5 提前谢谢 用数字对文件名进行排序是一个相当大的问题,因为有两种方法。第一个将它们设置为字母顺序。也就是说,0,1,11,111,2,

对不起,伙计们,我是新来的。如果有人在以下情况下提供帮助,那就太好了:

我在文件夹c:\test中有几个文件

sample.x.x.1
sample.x.x.2
sample.x.x.3
sample.x.x.4
sample.x.x.5
我想找到给定文件夹中名称中数字最大的文件名。在上面的示例中,5是最大的数字,脚本应将输出文件名返回为sample.x.x.5


提前谢谢

用数字对文件名进行排序是一个相当大的问题,因为有两种方法。第一个将它们设置为字母顺序。也就是说,
0,1,11,111,2,
第二个使用自然顺序。也就是说,
0,1,2,11111…
。这是一个令人惊讶的棘手问题,大约每三分之一的程序员对此感到困惑

已经有一个,我会这样说

# Create files 1..5
for($i=1;$i -le 5; ++$i) { set-content sample.x.x.$i -Value $null } 

# Tricksy! Create file .10 to confuse asciibetic/natural sorting
set-content sample.x.x.10 -Value $null

ls # Let's see the files

    Directory: C:\temp\test

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       2015-09-28     10:29              0 sample.x.x.1
-a----       2015-09-28     10:29              0 sample.x.x.10
-a----       2015-09-28     10:29              0 sample.x.x.2
-a----       2015-09-28     10:29              0 sample.x.x.3
-a----       2015-09-28     10:29              0 sample.x.x.4
-a----       2015-09-28     10:29              0 sample.x.x.5

# Define helper as per linked answer
$ToNatural = { [regex]::Replace($_, '\d+$', { $args[0].Value.PadLeft20) }) }

# Sort with helper and check the output is natural result
gci | sort $ToNatural -Descending | select -First 1

Directory: C:\temp\test

Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----       2015-09-28     10:29              0 sample.x.x.10
按字母顺序排序

PS C:\Users\Gebb> @("sample.x.x.1", "sample.x.x.5", "sample.x.x.11") | sort
sample.x.x.1
sample.x.x.11
sample.x.x.5
PS C:\Users\Gebb> @("sample.x.x.1", "sample.x.x.5", "sample.x.x.11") |
 sort -Property @{Expression={[Int32]($_ -split '\.' | select -Last 1)}}
sample.x.x.1
sample.x.x.5
sample.x.x.11
数字排序

PS C:\Users\Gebb> @("sample.x.x.1", "sample.x.x.5", "sample.x.x.11") | sort
sample.x.x.1
sample.x.x.11
sample.x.x.5
PS C:\Users\Gebb> @("sample.x.x.1", "sample.x.x.5", "sample.x.x.11") |
 sort -Property @{Expression={[Int32]($_ -split '\.' | select -Last 1)}}
sample.x.x.1
sample.x.x.5
sample.x.x.11
最大数量

PS C:\Users\Gebb> @("sample.x.x.1", "sample.x.x.5", "sample.x.x.11") |
 sort -Property @{Expression={[Int32]($_ -split '\.' | select -Last 1)}} |
 select -Last 1
sample.x.x.11

可能值得注意的是,ascibit/数值排序问题是由输入对象的类型引起的。如果您知道要对哪个子字符串进行排序,则可以将其转换为数字类型:
sort{$\子字符串($\ LastIndexOf('.')+1)-as[int]}