web-dev-qa-db-fra.com

Comment convertir une chaîne en entier dans PowerShell

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
40
Suman Ghosh

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

81
sodawillow

Utilisation:

$filelist = @(11, 1, 2)
$filelist | sort @{expression={$_[0]}} | 
  % {$newName = [string]([int]$($_[0]) + 1)}
  New-Item $newName -ItemType Directory
1
Sunny Wong

Utilisation:

$filelist = @("11", "1", "2")
$filelist | sort @{expression={[int]$_}} | % {$newName = [string]([int]$_ + 1)}
New-Item $newName -ItemType Directory
0
Sunny Wong