J'ai une liste de répertoires avec des numéros. Je dois trouver le nombre le plus élevé et l'incrémenter de 1, puis créer un nouveau répertoire avec cette valeur d'incrément. Je suis capable de trier le tableau ci-dessous, mais je ne peux pas incrémenter le dernier élément car il s'agit d'une chaîne.
Comment puis-je convertir cet élément de tableau ci-dessous en un entier?
PS C:\Users\Suman\Desktop> $FileList
Name
----
11
2
1
Vous pouvez spécifier le type d'une variable avant de forcer son type. Cela s'appelle casting (dynamique) ( plus d'informations ici ):
$string = "1654"
$integer = [int]$string
$string + 1
# Outputs 16541
$integer + 1
# Outputs 1655
À titre d’exemple, le fragment de code 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 dernière valeur IntVal
de l'objet (IntVal
) la plus élevée, l'incrémente et crée enfin un dossier portant le nom suivant:
# 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, vous pouvez donc le supprimer si vous préférez .
[int]::MaxValue = 2147483647
vous devez donc utiliser le type [long]
au-delà de cette valeur ([long]::MaxValue = 9223372036854775807
).
Utilisation:
$filelist = @(11, 1, 2)
$filelist | sort @{expression={$_[0]}} |
% {$newName = [string]([int]$($_[0]) + 1)}
New-Item $newName -ItemType Directory
Utilisation:
$filelist = @("11", "1", "2")
$filelist | sort @{expression={[int]$_}} | % {$newName = [string]([int]$_ + 1)}
New-Item $newName -ItemType Directory