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