【问题标题】:How to convert string to integer in PowerShell如何在PowerShell中将字符串转换为整数
【发布时间】:2015-11-14 10:00:37
【问题描述】:

我有一个带有数字的目录列表。我必须找到最大的数字并将其增加 1 并使用该增量值创建一个新目录。我可以对下面的数组进行排序,但我不能增加最后一个元素,因为它是一个字符串。

如何将下面的数组元素转换为整数?

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

Name
----
11
2
1

【问题讨论】:

    标签: powershell


    【解决方案1】:

    你可以在它之前指定一个变量的类型来强制它的类型。这称为(动态)投射 (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)。

    【讨论】:

    • 如果是长数字,请使用 [long]"232312333123"
    【解决方案2】:

    例子:

    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。

    【讨论】:

      【解决方案3】:

      用途:

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

      【讨论】:

        【解决方案4】:

        用途:

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

        【讨论】:

          【解决方案5】:

          一旦您选择了最大值,在我的示例中为“12”,您就可以将其声明为整数并增加您的值:

          $FileList = "1", "2", "11"
          $foldername = [int]$FileList[2] + 1
          $foldername
          

          【讨论】:

          • 我认为 OP 希望让脚本找到最高值
          • 抱歉,您的回答假设数组/列表总是有 3 个元素,这不是很灵活。
          • ... 并创建一个目录。输出目录名称不会神奇地创建它:)
          猜你喜欢
          • 2019-11-11
          • 2020-04-15
          • 2017-11-29
          • 2014-10-08
          • 2010-10-13
          • 1970-01-01
          相关资源
          最近更新 更多