2010-01-19 15 views
10

मैं फ़ाइल नाम बनाने के लिए स्ट्रिंग विस्तार सुविधा का उपयोग कर रहा हूं, और मुझे समझ में नहीं आता कि क्या हो रहा है।शक्तियों के साथ अजीब स्ट्रिंग विस्तार

पर विचार करें:

 

$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? 
 

बस अंडरस्कोर जोड़ने पूरी तरह से Powershell के नाली फेंक लगता है! यह शायद कुछ अजीब वाक्यविन्यास नियम है, लेकिन मैं नियम को समझना चाहता हूं। क्या कोई मेरी मदद कर सकता है?

उत्तर

16

दरअसल जो आप यहां देख रहे हैं वह यह पता लगाने में एक परेशानी है कि एक चर रोकता है और अगला वाला शुरू होता है। यह $ baseName_ की तलाश करने की कोशिश कर रहा है।

ठीक घुंघराले ब्रेसिज़ में चर संलग्न करने के लिए है:

$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 

आशा इस मदद करता है

+0

हां, इससे बहुत मदद मिलती है। धन्यवाद। – JMarsch

+2

भी काम करता है, लेकिन ब्रैकेट समाधान क्लीनर है। $ fileName = "$ ($ baseName) _ $ ($ count) $ ($ Ext)"; $ फ़ाइल नाम –

3

अंडरस्कोर पहचानकर्ताओं में एक कानूनी चरित्र है। इस प्रकार, यह $baseName_ नामक एक चर की तलाश में है। जो अस्तित्व में नहीं है।

+0

खैर उपयोग कर सकते हैं, मुझे लगा कि यह कुछ बेवकूफ था, मैं निराश नहीं हूं। धन्यवाद। – JMarsch

7

आप भी "$ baseName`_ $ गिनती $ Ext"

+0

यह मेरा पसंदीदा कामकाज है। –

संबंधित मुद्दे