Comment convertir une chaîne en entier dans powershell
J'ai une liste de répertoires avec des nombres. Je dois trouver le nombre le plus élevé et l'incrémenter de 1 et créer un nouveau répertoire avec cette valeur d'incrément. Je suis capable de trier le tableau ci-dessous, mais je ne suis pas capable d'incrémenter le dernier élément car c'est une chaîne.
Comment convertir cet élément de tableau ci-dessous en entier ?
PS C:UsersSumanDesktop> $FileList
Name
----
11
2
1
4 réponses
, Vous pouvez spécifier le type d'une variable avant de forcer son type, il est appelé (dynamique) de la coulée (plus d'info ici) :
$string = "1654"
$integer = [int]$string
$string + 1
#outputs 16541
$integer + 1
#outputs 1655
A titre d'exemple, l'extrait suivant ajoute, à chaque objet de $fileList
, une propriété IntVal
avec la valeur entière de la propriété Name
, puis trie $fileList
sur cette nouvelle propriété (la valeur par défaut est ascendante), prend la valeur IntVal
du dernier objet (la plus élevée IntVal
), l'incrémente et crée enfin un dossier nommé d'après :
#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
n'est pas nécessaire de sorte que vous pouvez supprimer si vous préférez
[int]::MaxValue = 2147483647
Vous devez donc utiliser le type [long]
au-delà de cette valeur ([long]::MaxValue = 9223372036854775807
).
$filelist=@("12","1","2")
$filelist | sort @{expression={[int]$_}} | % {$newName=[string]([int]$_+1)}
New-Item $newName -ItemType Directory
Une fois que vous avez sélectionné la valeur la plus élevée qui est "12" dans mon exemple, vous pouvez alors la déclarer comme entier et incrémenter votre valeur
$FileList = "2","3","12"
$foldername = [int]$FileList[2]+1
$foldername
$filelist=@(12,1,2)
$filelist | sort @{expression={$_[0]}} |
% {$newName=[string]([int]$($_[0])+1)}
New-Item $newName -ItemType Directory