2011-01-31 44 views
6

Şu kodlarım var:Bir ifadedeki bir değişkenin değerini nasıl artırabilirim?

$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'nin değerini 1 arttırmak istiyorum. Denedim $ b ++, $ b + =, loop, do-while, hiçbir şey çalışmıyor gibi görünüyor. Nasıl yapabilirim?

Aşağıdaki ek kodu da denedim, ancak b $ değerinin nasıl artırılacağını anlayamıyorum.

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

cevap

11

'b' değişkeni için açık komut kapsamını kullanın. Art arda (++) sonra değeri çıkarmayı unutmayın. Add-Member kullanmaktır

# 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

DİĞER ÖN seçeneği (çok güzel olmasa da): Burada

(seninkilerden biraz değiştirilmiş bir şeklidir) benim için çalışıyor koddur. Sen senin ForEach-Object bunu denedi: Bir dizede bu gerektiğinde

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

Bu hafif bir varyasyonu. Romanın küme parantezleri bir ip atmaz. Parantez kullanmanız gerekir:

`"$($script:b++; $script:b)"` 
İlgili konular