Как преобразовать строку в целое число в PowerShell

У меня есть список каталогов с номерами. Я должен найти наибольшее число и увеличить его на 1 и создать новый каталог с этим значением приращения. Я могу отсортировать массив ниже, но я не могу увеличить последний элемент, так как это строка.

Как мне преобразовать этот элемент массива ниже в целое число?

PS C:\Users\Suman\Desktop> $FileList

Name
----
11
2
1

Ответ 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).

Ответ 2

Использование:

$filelist = @(11, 1, 2)
$filelist | sort @{expression={$_[0]}} | 
  % {$newName = [string]([int]$($_[0]) + 1)}
  New-Item $newName -ItemType Directory

Ответ 3

Использование:

$filelist = @("11", "1", "2")
$filelist | sort @{expression={[int]$_}} | % {$newName = [string]([int]$_ + 1)}
New-Item $newName -ItemType Directory

Ответ 4

Пример:

2.032 MB (2,131,022 bytes)

$u=($mbox.TotalItemSize.value).tostring()

$u=$u.trimend(" bytes)") #yields 2.032 MB (2,131,022

$u=$u.Split("(") #yields '$u[1]' as 2,131,022

$uI=[int]$u[1]

Результат - 2131022 в целочисленной форме.

Ответ 5

Как только вы выбрали самое высокое значение, которое в моем примере равно "12", вы можете объявить его как целое и увеличить свое значение:

$FileList = "1", "2", "11"
$foldername = [int]$FileList[2] + 1
$foldername