2017-02-03 122 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