Как сделать так, чтобы диапазон чисел печатался только в виде двухзначных цифр? - PullRequest
0 голосов
/ 22 января 2019

Мне нужно иметь возможность распечатывать диапазон чисел только в виде двухзначных цифр. Например, 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 голосов
/ 22 января 2019
$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 ','
0 голосов
/ 22 января 2019

Оператор диапазона (..) работает только на числах в качестве конечных точек;чтобы отформатировать результирующий массив чисел, вы должны применить постобработка к элементам массива, созданным ..:

Примечание. В приведенном ниже примере вывода предполагается, что $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

Чтобы создать список имен в виде отдельной строки с разделителями , используйте -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 ','
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...