2011-01-31 71 views
6

我有以下代碼:如何增加表達式中變量的值?

$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 + =,for循環,這樣做,同時,似乎沒有任何合作。我該怎麼做?

我也嘗試了下面的附加代碼,但我無法弄清楚如何增加$ 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 

回答

11

對變量'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 
0

Ohter選項(雖然不是很漂亮)是使用Add-Member。你嘗試過在你的ForEach-Object

gci | 
    select Name | 
    % -beg {$counter=0} {$counter++; Add-Member -in $_ -name Test NoteProperty $counter -pass } 
1

這是因爲我需要這個字符串中的微小變化。羅馬的大括號不包含一個字符串。你需要使用圓括號:

`"$($script:b++; $script:b)"`