如何在 Powershell 中获取前导空格而不是零?

How to get leading spaces instead of zeros in Powershell?

在我的脚本中的某个地方,我正在为主机编写一个文件夹结构,其中包含每个文件夹中的文件数 [1]:

$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] 中的输出?

所以有几种方法可以解决这个问题。取决于你对最终结果所做的事情。使用 -Format 参数的对齐选项 (5 places)

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

或者字符串方法 .PadLeft()。以下两个示例应产生相同的输出。可读性首先会受到影响。请注意 .PadLeft() 是一个字符串方法。在我的示例中,我使用的是 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
$ItemCount=($Count.ToString()).PadLeft(3)