Ik heb een lijst met mappen met nummers. Ik moet het hoogste nummer vinden en het met 1 verhogen en een nieuwe map maken met die verhogingswaarde. Ik kan de onderstaande array sorteren, maar ik kan het laatste element niet verhogen omdat het een string is.
Hoe converteer ik dit onderstaande array-element naar een geheel getal?
PS C:\Users\Suman\Desktop> $FileList
Name
----
11
2
1
Antwoord 1, autoriteit 100%
U kunt het type van een variabele specificeren voordat het het type forceert. Het heet (dynamisch) casten(meer informatie is hier) :
$string = "1654"
$integer = [int]$string
$string + 1
# Outputs 16541
$integer + 1
# Outputs 1655
Als voorbeeld voegt het volgende fragment aan elk object in $fileList
een eigenschap IntVal
toe met de gehele waarde van de Name
eigenschap, sorteert vervolgens $fileList
op deze nieuwe eigenschap (de standaard is oplopend), neemt de laatste (hoogste IntVal
) object’s IntVal
waarde, incrementeel het en maakt ten slotte een map aan met de naam:
# 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
is niet nodig, zodat u het kunt verwijderen als u zich bevordert .
[int]::MaxValue = 2147483647
Dus u moet de [long]
Type buiten deze waarde ([long]::MaxValue = 9223372036854775807
).
Antwoord 2
Voorbeeld:
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]
Het resultaat is 2131022 in geheel getal.
Antwoord 3
Gebruik:
$filelist = @(11, 1, 2)
$filelist | sort @{expression={$_[0]}} |
% {$newName = [string]([int]$($_[0]) + 1)}
New-Item $newName -ItemType Directory
Antwoord 4
Gebruik:
$filelist = @("11", "1", "2")
$filelist | sort @{expression={[int]$_}} | % {$newName = [string]([int]$_ + 1)}
New-Item $newName -ItemType Directory
Antwoord 5
Nadat u de hoogste waarde hebt geselecteerd, wat “12” is in mijn voorbeeld, kunt u het dan als geheel en verhogen van uw waarde:
$FileList = "1", "2", "11"
$foldername = [int]$FileList[2] + 1
$foldername