用前导 0 填充 IP 地址 - powershell

Pad IP addresses with leading 0's - powershell

我希望用 0 填充 IP 地址

例子
1.2.3.4 -> 001.002.003.004
50.51.52.53 -> 050.051.052.053

试过这个:

[string]$paddedIP = $IPvariable
[string]$paddedIP.PadLeft(3, '0')

也尝试过拆分,但我是 powershell 的新手...

您可以组合使用 .Split()-join

('1.2.3.4'.Split('.') | 
    ForEach-Object {$_.PadLeft(3,'0')}) -join '.'

通过这种方法,您一直在处理字符串。 Split('.') 在每个 . 字符处创建一个数组元素。 .PadLeft(3,'0') 确保 3 个字符在必要时带有前导零。 -join '.' 将数组组合成一个字符串,每个元素由 ..

分隔

您可以对格式运算符 -f 采取类似的方法。

"{0:d3}.{1:d3}.{2:d3}.{3:d3}" -f ('1.2.3.4'.Split('.') |
    Foreach-Object { [int]$_ } )

:dN 格式字符串启用 N(位数)前导零填充。

此方法与第一个解决方案中一样创建一个字符串数组。然后每个元素都被流水线化并转换为 [int]。最后,格式应用于每个元素。

补充 with a more concise alternative using the -replace operator with a script block ({ ... }),这需要PowerShell Core (v6.1+):

PSCore> '1.2.3.50' -replace '\d+', { '{0:D3}' -f [int] $_.Value }

001.002.003.050

每次匹配正则表达式 \d+(一个或多个数字)都会调用脚本块,脚本块中的 $_ 指的是表示匹配的 System.Text.RegularExpressions.Match 实例在眼前;它的 .Value 属性 包含匹配的文本(字符串)。