Как я могу увеличить значение переменной в выражении? - PullRequest
6 голосов
/ 01 февраля 2011

У меня есть следующий код:

$b = 1
Import-Csv c:\Awsaf\powershell\Beforenew.csv | select name, CustomAttribute1, CustomAttribute2, @{n='Counter';e={$b}} | Export-Csv -NoTypeInformation c:\Awsaf\PowerShell\afternew.csv

Я хочу увеличить значение $ b на 1. Я пробовал $ b ++, $ b + =, для цикла, do-while, кажется, ничего не происходитработатьКак я могу это сделать?

Я также попробовал следующий дополнительный код, но не могу понять, как увеличить значение $ b.

$b = 0
Import-CSV c:\Awsaf\powershell\afternew.csv -Delimiter ',' | `
ForEach-Object { $_.Counter = "$b"; return $_ } | `
Export-CSV c:\awsaf\powershell\afterX.csv -Delimiter ',' -NoTypeInformation

Ответы [ 3 ]

11 голосов
/ 01 февраля 2011

Использовать явную область действия скрипта для переменной 'b'. После приращения (++) не забудьте вывести значение.

Вот код, который отлично работает для меня (это слегка измененная ваша версия):

# Prepare some data for the test
Get-ChildItem | Select-Object Name | Export-Csv test1.csv -NoTypeInformation

# 1) Use explicit script scope for the variable 'b'
# 2) After increment (++) do not forget to output it
$script:b = 0
Import-Csv test1.csv |
select Name, @{n='Counter'; e={$script:b++; $script:b}} |
Export-Csv -NoTypeInformation test2.csv
1 голос
/ 23 мая 2011

Это небольшое изменение, так как мне нужно было это в строке. Кудрявые скобки Романа не принимают строки. Вам необходимо использовать скобки:

`"$($script:b++; $script:b)"`
0 голосов
/ 01 февраля 2011

Охтер вариант (хотя и не такой красивый) - использовать Add-Member.Вы пробовали это в своем ForEach-Object:

gci | 
  select Name | 
  % -beg {$counter=0} {$counter++; Add-Member -in $_ -name Test NoteProperty $counter -pass }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...