Как выписать строку, длина которой зависит от длины записи пользователя?
Я пишу сценарий, который имеет много выходных данных и может принимать несколько имен компьютеров. Выходные данные объявляют имя компьютера, а затем много информации об этом конкретном компьютере. Я хочу иметь серию #
s выше и ниже, где он объявляет имя компьютера перед каждым разделом информации, но хотел бы видеть, могу ли я иметь количество #, равное длине предоставленного имени (имен) компьютера. Например:
######## COMPNAME ########
или же
############## LONGERCOMPNAME ##############
Я предпочел бы не иметь, если еще для каждого возможного случая, таких как
if ($compname.length -eq "8") {
Write-Host "########"
Write-Host "$compname"
Write-Host "########"
} elseif ($compname -eq "9") {
Write-Host "#########"
Write-Host "$compname"
Write-Host "#########"
и так далее. Если мне придется, я буду, это будет всего десять или около того. Или я мог бы просто использовать некоторое количество #
s, которые всегда будут охватывать как минимум максимальную длину имени компьютера.
4 ответа
Вам понравится эта функция PowerShell. Вы можете "умножить" строку.
Попробуй это:
$sep = '@'
Write-Output ($sep*5)
$names = "Hello World", "me too", "goodbye"
$names | % {
Write-Output ($sep*($_.Length))
Write-Output $_
Write-Output ($sep*($_.Length))
}
ВЫХОД
@@@@@
@@@@@@@@@@@
Hello World
@@@@@@@@@@@
@@@@@@
me too
@@@@@@
@@@@@@@
goodbye
@@@@@@@
Вы можете сделать это
$NbChar=5
#method 1 (best)
'@' * $NbChar
#method 2
New-Object System.String "@", $NbChar
#method 3
-join (1..$NbChar | %{"@"})
#method 4
"".PadLeft($NbChar, '@')
Я бы порекомендовал включить предложение Кори Гилла в пользовательскую функцию, чтобы у вас был простой способ форматирования любого имени:
function Format-ComputerName([string]$ComputerName) {
$separator = '#' * $ComputerName.Length
'{0}{1}{2}{1}{0}' -f $separator, [Environment]::NewLine, $ComputerName
}
Или баннер фиксированной ширины:
"{0}`r`n# {1,-76} #`r`n{0}" -f ('#' * 80), $compname;
например:
################################################################################
# LONGERCOMPNAME #
################################################################################
Вы также можете добавить даты, время и т.д.:
"{0}`r`n# {1:G} : {2,-54} #`r`n{0}" -f ('#' * 80), (Get-Date), $compname;
например:
################################################################################
# 04/02/2017 16:42:07 : LONGERCOMPNAME #
################################################################################
Подробнее о форматировании строки здесь