2017-02-03 81 views
0

我正在写一个有很多输出的脚本,并且可以使用多个计算机名称。输出结果公布计算机名称,然后公布有关该计算机的大量信息。我想在上面和下面有一系列的# s,它在信息的每个部分之前公布计算机名称,但是希望看看我能否将#s的数量与提供的计算机名称的长度相同( 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 "#########" 

等。如果必须的话,我会的,只有十个左右。或者我可以使用一定数量的#,它总是肯定会覆盖计算机名称的最大长度。

回答

6

你会喜欢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 
@@@@@@@ 
+0

谢谢Kory!这正是我所期待的。我已经改变了想要使用的格式,但是这完全回答了我的问题。 – Casspers

0

你可以做到这一点

$NbChar=5 


#method 1 (best) 
'@' * $NbChar 

#method 2 
New-Object System.String "@", $NbChar 

#method 3 
-join (1..$NbChar | %{"@"}) 

#method 4 
"".PadLeft($NbChar, '@') 
0

我建议在自定义函数包装Kory Gill的建议,所以你有一个简单的方法来格式化任何给定的名称:

function Format-ComputerName([string]$ComputerName) { 
    $separator = '#' * $ComputerName.Length 
    '{0}{1}{2}{1}{0}' -f $separator, [Environment]::NewLine, $ComputerName 
} 
0

或固定宽度的横幅:

"{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           # 
################################################################################ 

更多信息格式化here