2011-12-21 13 views
5

Sto cercando di scoprire perché il seguente verifica se si disponeReferencing PowerShell indice di matrice produce risultati imprevisti quando si fa riferimento con la stringa

$arr = @("Filename1", "Filename2") 
for($i =0; $i -le $arr.Length -1; $i++) { 

    write-host ".\"$arr[$i] 
    write-host ".\$arr[$i]" 
    write-host $arr[$i] 
} 

Quindi, prendendo un solo ciclo attraverso di essa produce:

".\ Filename1" 
".\ Filename1 Filename2[0]" 
"Filename1" 

Il semplice riferimento all'array [index] produrrà il valore corretto, ma se concatenato con una stringa pone uno spazio tra la stringa e il valore. Quando posizionato all'interno della stringa suppongo che è dumping l'intero contenuto perché sta valutando $ array poi valutare $ i finendo con

"\ nomefile1 nomefile2 [numero indice]"

Ma se assegno dell'individuo valore per una variabile separata e concatenarlo con una stringa non c'è spazio? Perché è questo:

Esempio:

$name = $arr[$i] 
write-host ".\$name" 

uscita =

che è corretto" \ nomefile1" ..

risposta

10

quello che dovete fare:

write-host ".\$($arr[$i])" 

in modo che sia valutato come array di indicizzazione.

Sarebbe il caso di qualcosa come accedere alle proprietà di un oggetto o una chiave di hash, ecc all'interno della stringa:

PS > $a = @{test="A";test2="B"} 
PS > write-host "$a.test" 
System.Collections.Hashtable.test 
PS > write-host "$($a.test)" 
A 

Un'altra alternativa è quella di utilizzare la formattazione di stringhe, particolarmente utile quando si hanno un sacco di variabili/oggetti nella stringa:

write-host (".\{0}" -f $arr[$i]) 
3

il codice dovrebbe essere simile a questa:

$arr = @("Filename1", "Filename2") 
#for($i =0; $i -le $arr.Length-1; $i++) { 
for($i =0; $i -le $arr.Length; $i++) { 

    write-host ".\"$arr[$i] 
    #write-host ".\$arr[$i]" 
    write-host ".\$($arr[$i])" 
    write-host $arr[$i] 
} 
Problemi correlati