如何使一系列数字仅打印为两位数?

时间:2019-01-21 23:03:11

标签: powershell scripting digits

我需要能够将一系列数字仅打印为两位数。例如,01,02,03,04...10,11

https://forums.overclockers.co.uk/threads/powershell-convert-1-digit-number-to-2-digit-number.18279138/

这是我正在尝试的脚本:

# Define a range's upper bound dynamically (IRL via user input)
$upperBound = 18

# Create an array of numbers (indices).
1..$upperBound

我尝试使用“ {0:D2}”作为上述站点,但出现错误“无法转换值”:

1.."{0:D2}" -f $upperBound

我也尝试过这个

"{0:D2}" -f $upperBound

但是,它仅显示输入的一个数字,而不显示整个范围。例如,如果输入2,我将得到02。我希望它显示01,02。

除此之外,我希望此范围显示在服务器名称旁边。我有一个服务器列表,该范围必须附加到服务器名称上。示例:

server01
server02

2 个答案:

答案 0 :(得分:1)

范围运算符(..)仅对数字作为端点进行操作;为了格式化所得的数字数组,您必须在..创建的数组元素上应用后处理

注意:以下示例输出假定$upperBound的值为3

使用PSv4 +语法:

PS> (1..$upperBound).ForEach({ '{0:D2}' -f $_ })
01
02
03

在PSv3-中,使用:

foreach ($ndx in 1..$upperBound) { '{0:D2}' -f $ndx } # same output as above.

要使格式化的“数字字符串”成为服务器名称的一部分:

PS> (1..$upperBound).ForEach({ 'server{0:D2}' -f $_ })
server01
server02
server03

要创建名称的 list 作为带有分隔符的单个字符串,请在结果数组上使用-join运算符:

PS> (1..$upperBound).ForEach({ 'server{0:D2}' -f $_ }) -join ','
server01,server02,server03

在PSv3-中:

$(foreach ($ndx in 1..$upperBound) { 'server{0:D2}' -f $ndx }) -join ','

答案 1 :(得分:0)

$upperbound = 18
$totalArray = 1..$upperbound | foreach {$_.tostring('00')}
foreach ($server in (cat serverlist.txt)) {
    $totalarray | foreach {"$server$_"}
}

将00替换为您希望0占据的位置

0 = 1,2,3等。

00 = 01、02、03等...

000 = 001、002、003等。

如果您要用逗号在一行中显示服务器数字,您可以这样做

$totalArray -join ','