Как получить наибольшее число приращений имени папки в Powershell? - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть папки, которые были названы постепенно, например, Folder 01 TAG Folder 02 TAG Folder 03 TAG и так далее. Однако по тому же пути будут папки с другим именем, если это уместно. Любая идея сделать PowerShell вернуть простое имя папки с наибольшим приращением? Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 01 ноября 2018

Поскольку числа имеют фиксированную ширину, сортировка в файловых системах NTFS не требуется.

В случае несортированных файловых систем и номеров в разных местах,
Я бы использовал $ ToNatural от Ронана Кузьмина , он расширяет каждое число до 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
0 голосов
/ 01 ноября 2018

вот еще один способ сделать это ... [ ухмылка ]

# 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

что он делает ...

  • отфильтровывает любое имя dir, в котором нет цифр
  • сортирует элементы [по умолчанию полное имя]
  • выбирает последний
  • захватывает .Name этого объекта
  • заменяет любую не цифру ничем
  • принуждает [string] к [int]
  • добавляет один к этому
  • использует оператор строкового формата -f, чтобы создать новое имя Dir с новым наибольшим номером
0 голосов
/ 01 ноября 2018

Вы можете использовать что-то вроде следующего в качестве отправной точки ...

$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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...