2015-11-14 17 views
10

Ho una lista di directory con numeri. Devo trovare il numero più alto e incrementarlo di 1 e creare una nuova directory con quel valore di incremento. Sono in grado di ordinare l'array sottostante, ma non sono in grado di incrementare l'ultimo elemento in quanto è una stringa.Come convertire stringa in intero in powershell

Come faccio a convertire questo sotto l'elemento dell'array in intero?

PS C:\Users\Suman\Desktop> $FileList 

Name 
---- 
11 
2 
1 

risposta

19

È possibile specificare il tipo di una variabile prima a forzare il suo tipo, si chiama (dinamico) di colata (maggiori info in this PS Team blog article):

$string = "1654" 
$integer = [int]$string 

$string + 1 
#outputs 16541 

$integer + 1 
#outputs 1655 

Come esempio, il seguente frammento aggiunge, a ogni oggetto $fileList, una proprietà IntVal con il valore intero della proprietà Name, quindi ordina $fileList su questa nuova proprietà (default è crescente), prende l'ultimo (più alto IntVal) il valore dell'oggetto IntVal, lo incrementa e, infine, crea una cartella denominata dopo che è:

#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 non è necessaria in modo da poter rimuovere , se si preferisce

+0

Penso che OP voglia incrementare l'ultimo elemento – kekimian

+0

E in che modo la mia risposta merita un downvote da parte tua?:) – sodawillow

+0

solo perché "penso" come te – kekimian

-1

Una volta selezionato il valore più alto, che è "12" nel mio esempio, si può quindi dichiarare come intero e incrementare il valore del

$FileList = "2","3","12" 
$foldername = [int]$FileList[2]+1 
$foldername 
+0

Penso che OP desideri che lo script trovi il valore più alto – sodawillow

+0

"Sono in grado di ordinare l'array sottostante. ma non sono in grado di incrementare l'ultimo elemento dato che è una stringa " – kekimian

+0

Scusa ma la tua risposta presuppone che l'array/elenco abbia sempre 3 elementi, il che non è molto flessibile – sodawillow

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