我想用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的新手...
答案 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
属性包含匹配的文本(字符串)。