【发布时间】:2015-11-14 10:00:37
【问题描述】:
我有一个带有数字的目录列表。我必须找到最大的数字并将其增加 1 并使用该增量值创建一个新目录。我可以对下面的数组进行排序,但我不能增加最后一个元素,因为它是一个字符串。
如何将下面的数组元素转换为整数?
PS C:\Users\Suman\Desktop> $FileList
Name
----
11
2
1
【问题讨论】:
标签: powershell
我有一个带有数字的目录列表。我必须找到最大的数字并将其增加 1 并使用该增量值创建一个新目录。我可以对下面的数组进行排序,但我不能增加最后一个元素,因为它是一个字符串。
如何将下面的数组元素转换为整数?
PS C:\Users\Suman\Desktop> $FileList
Name
----
11
2
1
【问题讨论】:
标签: powershell
你可以在它之前指定一个变量的类型来强制它的类型。这称为(动态)投射 (more information is here):
$string = "1654"
$integer = [int]$string
$string + 1
# Outputs 16541
$integer + 1
# Outputs 1655
例如,下面的 sn-p 在$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)。
【讨论】:
例子:
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。
【讨论】:
用途:
$filelist = @(11, 1, 2)
$filelist | sort @{expression={$_[0]}} |
% {$newName = [string]([int]$($_[0]) + 1)}
New-Item $newName -ItemType Directory
【讨论】:
用途:
$filelist = @("11", "1", "2")
$filelist | sort @{expression={[int]$_}} | % {$newName = [string]([int]$_ + 1)}
New-Item $newName -ItemType Directory
【讨论】:
一旦您选择了最大值,在我的示例中为“12”,您就可以将其声明为整数并增加您的值:
$FileList = "1", "2", "11"
$foldername = [int]$FileList[2] + 1
$foldername
【讨论】: