如何在Powershell中获得最大的文件夹名称增量数?

时间:2018-11-01 06:20:21

标签: powershell

我有一些递增命名的文件夹,例如Folder 01 TAG Folder 02 TAG Folder 03 TAG,依此类推。但是,在同一路径中,如果相关的话,也会有不同名称的文件夹。有什么想法可以使Powershell返回一个简单的最大增量文件夹名称吗?预先感谢。

3 个答案:

答案 0 :(得分:3)

您可以使用以下内容作为起点...

$numbers = $null
$numbers += (dir "Folder * TAG" | select Name).Name | % { 
   if ($_ -match "(.*)(\d)(.*)") { 
      $Matches[2] 
   } 
}
$maxNumber = [int]($numbers | sort-object -Descending)[0]
$maxNumber++
$foldername = "Folder $maxNumber TAG"
$foldername

答案 1 :(得分:3)

由于数字的宽度是固定的,因此不必在NTFS文件系统上进行排序。

如果未排序的文件系统和编号在不同位置,
 我会用$ToNatural from Ronan Kuzmin将每个数字扩展到20个地方。

$ToNatural = { [regex]::Replace($_, '\d+', { $args[0].Value.PadLeft(20) }) }

Get-ChildItem "Folder [0-9]* TAG" -Dir|Sort-Object $ToNatural|Select-Object -Expand Name -Last 1

答案 2 :(得分:2)

这是另一种方法... [咧嘴]

# fake reading in a list of directories
#    in real life, use Get-Content -Directory
$DirList = @(
[System.IO.DirectoryInfo]'Folder 02 TAG'
[System.IO.DirectoryInfo]'Folder 03 TAG'
[System.IO.DirectoryInfo]'Dir Some Word'
[System.IO.DirectoryInfo]'Dir Other Word'
[System.IO.DirectoryInfo]'Folder 66 TAG'
[System.IO.DirectoryInfo]'Folder 05 TAG'
[System.IO.DirectoryInfo]'Folder 01 TAG'
)

$NextNumber = [int](($DirList |
    Where-Object {$_ -match ' \d{2} '} |
    Sort-Object |
    Select-Object -Last 1).Name -replace '[^0-9]') + 1

$NextDirName = 'Folder {0:D2} TAG' -f $NextNumber

$NextNumber
$NextDirName

输出...

67
Folder 67 TAG

它做什么...

  • 过滤掉其中没有数字的目录名称
  • 对项目进行排序[默认为全名]
  • 选择最后一个
  • 抓住该对象的.Name
  • 替换所有非数字
  • [string]强制为[int]
  • 向其中添加一个
  • 使用-f字符串格式运算符创建具有最高数字的新Dir名称