How to convert string to integer in PowerShell

后端 未结 5 662
走了就别回头了
走了就别回头了 2020-12-29 19:36

I have a list of directories with numbers. I have to find the highest number and and increment it by 1 and create a new directory with that increment value. I am able to sor

相关标签:
5条回答
  • 2020-12-29 19:55

    You can specify the type of a variable before it to force its type. It's called (dynamic) casting (more information is here):

    $string = "1654"
    $integer = [int]$string
    
    $string + 1
    # Outputs 16541
    
    $integer + 1
    # Outputs 1655
    

    As an example, the following snippet adds, to each object in $fileList, an IntVal property with the integer value of the Name property, then sorts $fileList on this new property (the default is ascending), takes the last (highest IntVal) object's IntVal value, increments it and finally creates a folder named after it:

    # 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 is not needed so you can remove it if you prefer.

    [int]::MaxValue = 2147483647 so you need to use the [long] type beyond this value ([long]::MaxValue = 9223372036854775807).

    0 讨论(0)
  • 2020-12-29 20:01

    Use:

    $filelist = @(11, 1, 2)
    $filelist | sort @{expression={$_[0]}} | 
      % {$newName = [string]([int]$($_[0]) + 1)}
      New-Item $newName -ItemType Directory
    
    0 讨论(0)
  • 2020-12-29 20:01

    Once you have selected the highest value, which is "12" in my example, you can then declare it as integer and increment your value:

    $FileList = "1", "2", "11"
    $foldername = [int]$FileList[2] + 1
    $foldername
    
    0 讨论(0)
  • 2020-12-29 20:06

    Use:

    $filelist = @("11", "1", "2")
    $filelist | sort @{expression={[int]$_}} | % {$newName = [string]([int]$_ + 1)}
    New-Item $newName -ItemType Directory
    
    0 讨论(0)
  • 2020-12-29 20:08

    Example:

    2.032 MB (2,131,022 bytes)

    $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]
    

    The result is 2131022 in integer form.

    0 讨论(0)
提交回复
热议问题