我想在每兩個字符后插入":"--最終結果應該是這樣的 51:40:2E:c0:11:0b:3e:3c。
我的解決方案
$s = "51402ec0110b3e3c"/span>
for ($i = 2; $i -lt $s.Length; $i =3)
{
$s.Insert($i,' :')
}
寫下$s.Host
回傳
51:402ec0110b3e3c
51402:ec0110b3e3c
51402ec0:110b3e3c
51402ec0110:b3e3c
51402ec0110b3e:3c
51402ec0110b3e3c
為什么我只把Write-Host放在最后,而$s卻被多次回傳?另外,看起來$s在每次回圈后都會回傳到它的原始值,覆寫了之前的回圈......
我以為$s會一直回傳到它的原始值。
我認為這個回圈的目的與此相同:
我認為這個回圈的目的與此相同。
$s = $sInsert(2,' :') 。 Insert(5,' :'). Insert(8,':'). Insert(11,':')。 Insert(14,':'). Insert(17,':'). 插入(20,' :')
uj5u.com熱心網友回復:
這是因為insert回傳一個新的字串。它不會就地修改。所以你必須改變
$s.Insert($i,': ')
to
$s = $s.Insert($i,' :'/span>)
uj5u.com熱心網友回復:
你也可以通過-replace運算子在不回圈的情況下做到這一點:
$s = "51402ec0110b3e3c"/span>
$s = $s -replace '.(?!$)','$0:'
-split和-join的組合也可以:
$s = "51402ec0110b3e3c"
$s = $s -split ' (. )' -ne '' -join ' :'
uj5u.com熱心網友回復:
將十六進制字串轉換為以冒號為分隔符的字串的另一種方法是使用-split運算子,并指定兩個連續字符的模式。
$s = "51402ec0110b3e3c"。
($s -split '(.)').Where({$_}) -join ' :'
......將得到這個= 51:40:2e:c0:11:0b:3e:3c。
.Where()過濾掉分割后留下的空白條目。[grin]
請注意,
lee
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/309289.html
標籤:
