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   
25
demandé sur sodawillow 2015-11-14 13:00:37

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).

47
répondu sodawillow 2018-06-05 18:35:35
$filelist=@("12","1","2")
$filelist | sort @{expression={[int]$_}} | % {$newName=[string]([int]$_+1)}
New-Item $newName -ItemType Directory
0
répondu Sunny Wong 2016-11-16 17:38:20

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
-1
répondu kekimian 2015-11-14 10:14:18
$filelist=@(12,1,2)
$filelist | sort @{expression={$_[0]}} | 
% {$newName=[string]([int]$($_[0])+1)}
New-Item $newName -ItemType Directory
-1
répondu Sunny Wong 2016-11-14 18:02:53