Powershell Увеличение значения на 0.0.1 - PullRequest
2 голосов
/ 10 марта 2020

У меня есть переменная, которая возвращает значения из json:

$version = (Get-Content 'package.json' | ConvertFrom-Json).version

Это значение всегда идет в формате xxx. Это может быть значение 0.0.3 или 1.123.23.

Мой вопрос - как увеличить значение только патча? Например, мне нужно иметь выходные значения 0.0.4 или 1.123.24 после преобразования.

Ответы [ 4 ]

3 голосов
/ 10 марта 2020

Преобразовать в [version] объект:

# read existing version
$version = [version](Get-Content 'package.json' | ConvertFrom-Json).version

# create new version based on previous with Build+1
$bumpedVersion = [version]::new($version.Major, $version.Minor, $Version.Build + 1)

Либо разделить строку вручную:

$major,$minor,$build = $version.Split('.')

# increment build number
$build = 1 + $build

# stitch back together
$bumpedVersion = $major,$minor,$build -join '.'
2 голосов
/ 10 марта 2020

В дополнение к полезный ответ Матиаса с краткой альтернативой, основанной на операторе -replace :

# PowerShell [Core] only (v6.2+) - see bottom for Windows PowerShell solution.
PS> '0.0.3', '1.123.3' -replace '(?<=\.)[^.]+$', { 1 + $_.Value }
0.0.4
1.123.4
  • Regex (?<=\.)[^.]+$ соответствует последнему компоненту номера версии (без учета предыдущего . в совпадении).

  • Блок сценариев { 1 + $_.Value } заменяет этот компонент с его значением, увеличенным на 1.

Для решений по увеличению любых компонентов с номером версии, включая правильную обработку версии [semver] цифры, см. этот ответ .


В Windows PowerShell , где синтаксис -replace на основе блоков сценариев не поддерживается, Решение является более громоздким, поскольку оно требует прямого использования типа. NET System.Text.RegularExpressions.Regex:

PS> '0.0.3', '1.123.3' | foreach { 
       [regex]::Replace($_, '(?<=\.)[^.]+$', { param($m) 1 + $m.Value })
    }
0.0.4
1.123.4
1 голос
/ 11 марта 2020

Попробуйте это:

$build = [int]($version.split(".")[2])+1
$bumpedversion = $version.split(".")[0], $version.split(".")[1], $build -join "."
1 голос
/ 10 марта 2020
C:\> $v = "1.2.3"
C:\> $(($v -split "\.")[0..1] + "$([int](($v -split '\.') |Select-Object -Index 2) +1)") -join "."
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...