2010-01-19 17 views
10

Sto utilizzando la funzione di espansione delle stringhe per creare nomi di file e non capisco cosa sta succedendo.Espansione strana delle stringhe con PowerShell

considerare:

 

$baseName = "base" 
[int]$count = 1 
$ext = ".ext" 

$fileName = "$baseName$count$Ext" 
#filename evaluates to "base1.ext" -- expected 

#now the weird part -- watch for the underscore: 
$fileName = "$baseName_$count$Ext" 
#filename evaluates to "1.ext" -- the basename got dropped, what gives? 
 

Basta aggiungere la sottolineatura sembra gettare completamente fuori solco di PowerShell! Probabilmente è una strana regola della sintassi, ma mi piacerebbe capire la regola. Qualcuno mi può aiutare?

risposta

16

In realtà quello che state vedendo qui è un problema nel capire quando una variabile si ferma e la prossima parte. Sta cercando di cercare $ baseName_.

La correzione è quello di racchiudere le variabili tra parentesi graffe:

$baseName = "base" 
[int]$count = 1 
$ext = ".ext" 

$fileName = "$baseName$count$Ext" 
#filename evaluates to "base1.ext" -- expected 

#now the wierd part -- watch for the underscore: 
$fileName = "$baseName_$count$Ext" 
#filename evaluates to "1.ext" -- the basename got dropped, what gives? 

$fileName = "${baseName}_${count}${Ext}" 
# now it works 
$fileName 

Spero che questo aiuti

+0

Sì, questo aiuta molto. Grazie. – JMarsch

+2

Funziona anche, ma la soluzione della staffa è più pulita. $ fileName = "$ ($ baseName) _ $ ($ count) $ ($ Ext)"; $ fileName –

3

Underscore è un carattere legale negli identificatori. Pertanto, sta cercando una variabile denominata $baseName_. Che non esiste

+0

Beh, Ho pensato che fosse qualcosa di stupido, non sono deluso. Grazie. – JMarsch

7

è anche possibile utilizzare "$ baseName`_ $ count $ Ext"

+0

Questa è la soluzione alternativa preferita. –

Problemi correlati