2015-02-05 55 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