2011-01-31 40 views
6

Ho il codice seguente:Come posso aumentare il valore di una variabile in un'espressione?

$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 

voglio incrementare il valore di $ b di 1. Ho cercato $ b ++, $ b + =, per il ciclo, do-while, nulla sembra funzionare. Come posso farlo?

Ho anche provato il seguente codice aggiuntivo, ma non riesco a capire come aumentare il valore di $ 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 

risposta

11

Utilizzare l'ambito di script esplicito per la variabile 'b'. Dopo l'incremento (++) non dimenticare di emettere il valore.

Ecco il codice che funziona bene per me (si tratta di una versione leggermente modificata del vostro):

# 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

opzione Ohter (anche se non così bella) è quello di utilizzare Add-Member. Si è tentato nel tuo ForEach-Object:

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

Questa è una leggera variante, come ho bisogno di questo in una stringa. Le parentesi graffe di Roman non prendono una stringa. È necessario utilizzare le parentesi:

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