2013-10-21 21 views
1

我試圖得到一個文件名出現這樣的:如何在PowerShell中的字母數字字符之後的字符串中打印變量?

focus131021a.wav

我已經聲明的日期作爲變量:

$DateFilename = get-date -format "yyMMdd" 

但是,我不能讓該變量放入一個字符串中,同時保留最後一個「a」字符。下面是一些多次失敗的試驗...

PS C:\script> $FileName3 = "focus'$DateFilename`a.wav" 
PS C:\script> echo $FileName3 
focus'131021.wav 
PS C:\script> $FileName3 = "focus$DateFilename'a.wav" 
PS C:\script> echo $FileName3 
focus131021'a.wav 
PS C:\script> $FileName3 = "focus$DateFilename`a.wav" 
PS C:\script> echo $FileName3 
focus131021.wav 
PS C:\script> $FileName3 = "focus$DateFilename'aa.wav" 
PS C:\script> echo $FileName3 
focus131021'aa.wav 
PS C:\script> $FileName3 = "focus$DateFilename'a.wav" 
PS C:\script> echo $FileName3 
focus131021'a.wav 

回答

3

簡單的方法是使用格式:

$filename3 = 'focus{0:yyMMdd}a.wav' -f (get-date) 

否則你結束了瘋狂的轉義序列,嵌套的引號,或的一個爛攤子串添加。

+0

謝謝。就這樣我理解了我學習PowerShell的邏輯。 -f調用{}中的項作爲變量傳遞的函數(get-date)? 0: –

+0

'formattring -f arguments'的意義是'String.Format(formatstring,arguments)'的一個快捷方式。 '{0}'表示第一個參數,在這種情況下是'get-date'。括號只是告訴Powershell在替換之前運行命令。 – Eris

3

另一種方式來做到這一點使用OP的原始的做法:

$DateFilename = get-date -format "yyMMdd" 
$FileName3 = "focus${DateFilename}a.wav" 

您可以使用{}周圍的變量名雙引號字符串中劃定的其他文本的變量名。

+0

這可以在簡單的情況下工作,但在嘗試使用屬性或哈希表時會爆炸。 – Eris

+0

@Eris如果你正在使用屬性,那麼你並沒有真的在做簡單的可變插值。你在做表情評估。在這種情況下''focus $(get-date -f yyMMdd)a.wav「'工作得很好。在這種情況下,我沒有看到*任何*需要使用'-f'運算符。 –

相關問題