2011-01-31 9 views
6

Mam następujący kod:Jak zwiększyć wartość zmiennej w wyrażeniu?

$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 

Chcę zwiększamy wartość $ b o 1. Próbowałem $ b ++ $ b + =, dla pętli do-while, nic nie wydaje się działać. Jak mogę to zrobić?

Próbowałem również następujący dodatkowy kod, ale nie mogę dowiedzieć się, jak zwiększyć wartość $ 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 

Odpowiedz

11

Użyj jawnego zakresu skryptu dla zmiennej "b". Po inkrementacji (++) nie zapomnij wypisać wartości.

Oto kod, który działa dobrze dla mnie (jest to nieco zmieniona wersja Twoim):

# 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

opcja Ohter (choć nie tak piękne) jest użycie Add-Member. Próbowano go w ForEach-Object:

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

Jest to niewielkie zmiany, jak musiałem to na sznurku. Kręcone klamry Romana nie biorą sznurka. Musisz użyć nawiasów:

`"$($script:b++; $script:b)"` 
Powiązane problemy