Какой самый быстрый / простой способ увеличить число в строковой переменной в Powershell?

#powershell

#powershell

Вопрос:

У меня есть следующая переменная Powershell

 $var = "AB-0045"
 

Я хотел бы увеличить число в строке, чтобы оно стало «AB-0046».
Я могу сделать:

 $newNumber = [int]$var.Substring($var.length -4,4)   1
 

Это даст мне желаемое число 46, но затем я должен добавить это 46 в виде строки к новой строке «AB-00».
Есть ли лучший способ сделать это?

Комментарии:

1. Нет, это не так. Строки — это не числа, числа — это не строки, и если вы хотите создать новое строковое значение, вам придется создать новое строковое значение 🙂

2. Лично я бы просто использовал регулярное выражение replace для этого : [regex]::Replace($var,'d $',{([int]$args[0].Value 1).ToString('0000')}) .

3. Может быть, вы могли бы вместо этого использовать объект, который имеет свойство number?

Ответ №1:

Теперь, когда у вас есть целое число, вам нужно будет преобразовать обратно в строку, отформатированную так, как вы хотите, и объединить.

Я бы рекомендовал добавить «AB-«, а не «AB-00» на случай, если ваше число превысит 100.

Для заполнения начальных нулей вы можете использовать оператор -f.

например "{0:d4}" -f 45

Вам все равно нужно сначала получить целое число (45 в примере) из исходной строки.

Комментарии:

1. Хорошо, спасибо, но проблема в том, что когда я получаю 0045 и преобразую его в int, чтобы увеличить его, оно становится 45 и теряет нули.

2. Для этого и нужен оператор -f

Ответ №2:

Я тестировал с Replace() помощью метода класса регулярных выражений и Split() метода класса string с помощью средства форматирования строк. Split() кажется быстрее, если ваша строка всегда находится в одном и том же формате. Replace() Методу все равно, что происходит перед последними 4 числами:

 # Replace Method
[regex]::Replace($var,'d{4}



,{([int]$args[0].Value 1).ToString('0000')})

# Split method
$a,[int]$b = $var.split('-'); "{0}-{1:0000}" -f $a, $b