2015-02-05 56 views
3

某處在我的劇本我寫一個folderstructure與文件數量到主機的每個文件夾[1]:如何在Powershell中獲得前導空格而不是零?

$FolderName = "BAR" 
$ItemCount = "{0:000}" -f 7 

Write-Host $ItemCount $FolderName 

這將輸出類似[2]:

007 BAR 
044 BAZ 
311 FOO 

什麼其實我是想爲[3]:

7 BAR 
44 BAZ 
311 FOO 

我不想使用自定義的PowerShell的對象,因爲它會在控制檯的整個寬度輸出[4]:

Folder              Itemcount 
------              --------- 
BAR                 7 
BAZ                 44 
FOO                311 

我想等的輸出[5]:

Folder ItemCount 
------ --------- 
BAR    7 
BAZ    44 
FOO   311 

所以靠近在一起,這使得它更具有可讀性。但是我選擇了我的解決方案(來自FolderName的ItemCount)作爲第二個最佳選項,因爲我無法使其工作。

如何獲得[3]或[5]中的輸出?

+1

你只是在尋找'.PadLeft'?或者'Format-Table'esque操作 – Matt 2015-02-05 13:23:47

+2

用'-AutoSize'嘗試'Format-Table'。它會產生類似[5]的東西。 – 2015-02-06 07:32:24

回答

3

所以有幾種方法可以解決這個問題。取決於你正在做什麼與最終結果。採用-Format參數(5個地方

gci c:\temp *.csv | ForEach-Object{ 
    "{0,5} {1}" -f $_.Length, $_.Name 
} 

或者這個字符串的方法.PadLeft()的對齊選項。這兩個例子都應該產生相同的輸出。首先,可讀性可能受到影響。請注意0​​是一個字符串方法。在我的示例中,我使用的是length,它是int,所以我們必須將其轉換爲字符串。

"$(([string]($_.Length)).PadLeft(5)) $($_.Name)" 
"{0} {1}" -f ([string]($_.Length)).PadLeft(5),$_.Name 

現在......也許你只是想與Format-Table一起工作,以獲得更好的屏幕輸出。只需要以另一種方式使用我的第一個示例

gci c:\temp *.csv | Select-Object @{Name="Length";Expression={"{0,5}" -f $_.Length}}, Name | Format-Table -AutoSize