我有一个带数字的目录列表。我必须找到最高的数字并将其递增1并使用该增量值创建一个新目录。我可以对下面的数组进行排序,但是我无法增加最后一个元素,因为它是一个字符串。
如何将此数组元素转换为整数?
PS C:\Users\Suman\Desktop> $FileList
Name
----
11
2
1
答案 0 :(得分:74)
您可以在强制其类型之前指定变量的类型,它被称为(动态)投射(more info here):
$string = "1654"
$integer = [int]$string
$string + 1
#outputs 16541
$integer + 1
#outputs 1655
例如,以下代码段向$fileList
中的每个对象添加IntVal
属性,其Name
属性的整数值,然后对$fileList
进行排序这个新属性(默认为升序),取最后一个(IntVal
}个对象的IntVal
值,递增它,最后创建一个以它命名的文件夹:
#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
不需要,因此如果您愿意,可以将其删除
[int]::MaxValue = 2147483647
因此您需要使用超出此值的[long]
类型([long]::MaxValue = 9223372036854775807
)。
答案 1 :(得分:1)
$filelist=@(12,1,2)
$filelist | sort @{expression={$_[0]}} |
% {$newName=[string]([int]$($_[0])+1)}
New-Item $newName -ItemType Directory
答案 2 :(得分:0)
$filelist=@("12","1","2")
$filelist | sort @{expression={[int]$_}} | % {$newName=[string]([int]$_+1)}
New-Item $newName -ItemType Directory
答案 3 :(得分:0)
示例:
2.032 MB(2,131,022字节)
$u=($mbox.TotalItemSize.value).tostring()
$u=$u.trimend(" bytes)") #yields 2.032 MB (2,131,022
$u=$u.Split("(") #yields `$u[1]` as 2,131,022
$uI=[int]$u[1]
结果是2131022的整数形式。
答案 4 :(得分:-2)
在我的示例中选择了最高值“12”后,您可以将其声明为整数并增加值
$FileList = "2","3","12"
$foldername = [int]$FileList[2]+1
$foldername