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