Ответ 1
Вы можете указать тип переменной до того, как она будет принудительно установлена. Это называется (динамическое) приведение (дополнительная информация здесь):
$string = "1654"
$integer = [int]$string
$string + 1
# Outputs 16541
$integer + 1
# Outputs 1655
В качестве примера следующий фрагмент добавляет к каждому объекту в $fileList
свойство IntVal
с целочисленным значением свойства Name
, затем сортирует $fileList
по этому новому свойству (по умолчанию возрастает), принимает последнее (самое высокое IntVal
) значение объекта IntVal
увеличивает его и, наконец, создает папку, названную в его честь:
# For testing purposes
#$fileList = @([PSCustomObject]@{ Name = "11" }, [PSCustomObject]@{ Name = "2" }, [PSCustomObject]@{ Name = "1" })
# OR
#$fileList = New-Object -TypeName System.Collections.ArrayList
#$fileList.AddRange(@([PSCustomObject]@{ Name = "11" }, [PSCustomObject]@{ Name = "2" }, [PSCustomObject]@{ Name = "1" })) | Out-Null
$highest = $fileList |
Select-Object *, @{ n = "IntVal"; e = { [int]($_.Name) } } |
Sort-Object IntVal |
Select-Object -Last 1
$newName = $highest.IntVal + 1
New-Item $newName -ItemType Directory
Sort-Object IntVal
не нужен, поэтому вы можете удалить его, если хотите.
[int]::MaxValue = 2147483647
, поэтому вам нужно использовать тип [long]
за пределами этого значения ([long]::MaxValue = 9223372036854775807
).