使用前导0填充IP地址-Powershell

时间:2019-09-24 17:57:01

标签: powershell string-formatting ip-address

我想用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的新手...

2 个答案:

答案 0 :(得分:1)

您可以结合使用.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]。最后,将格式应用于每个元素。

答案 1 :(得分:1)

使用AdminOfThings' helpful answer -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属性包含匹配的文本(字符串)。