ฉันต้องการเพิ่มที่อยู่ IP ด้วย 0
ตัวอย่าง
1.2.3.4 -> 001.002.003.004
50.51.52.53 -> 050.051.052.053
ลองสิ่งนี้:
[string]$paddedIP = $IPvariable
[string]$paddedIP.PadLeft(3, '0')
ลองแยกด้วยเช่นกัน แต่ฉันยังใหม่กับ PowerShell ...
ฉันต้องการเพิ่มที่อยู่ IP ด้วย 0
ตัวอย่าง
1.2.3.4 -> 001.002.003.004
50.51.52.53 -> 050.051.052.053
ลองสิ่งนี้:
[string]$paddedIP = $IPvariable
[string]$paddedIP.PadLeft(3, '0')
ลองแยกด้วยเช่นกัน แต่ฉันยังใหม่กับ PowerShell ...
คุณสามารถใช้การรวมกันของ .Split()
และ -join
('1.2.3.4'.Split('.') |
ForEach-Object {$_.PadLeft(3,'0')}) -join '.'
ด้วยแนวทางนี้ คุณจะทำงานกับสตริงตลอดเวลา Split('.')
สร้างองค์ประกอบอาร์เรย์ทุกๆ .
อักขระ .PadLeft(3,'0')
รับรองว่าจะมีอักขระ 3 ตัวโดยมีเลขศูนย์นำหน้าหากจำเป็น -join '.'
รวมอาร์เรย์เป็นสตริงเดียว โดยแต่ละองค์ประกอบคั่นด้วย .
คุณสามารถใช้แนวทางที่คล้ายกันกับตัวดำเนินการรูปแบบ -f
"{0:d3}.{1:d3}.{2:d3}.{3:d3}" -f ('1.2.3.4'.Split('.') |
Foreach-Object { [int]$_ } )
สตริงรูปแบบ :dN
เปิดใช้งานการเติม N
(จำนวนหลัก) โดยมีเลขศูนย์นำหน้า
วิธีนี้จะสร้างอาร์เรย์สตริงเหมือนในโซลูชันแรก จากนั้นแต่ละองค์ประกอบจะถูกไปป์ไลน์และแปลงเป็น [int]
สุดท้ายนี้ การจัดรูปแบบจะถูกนำไปใช้กับแต่ละองค์ประกอบ
เพื่อเสริม คำตอบที่เป็นประโยชน์ของ AdminOfThings ด้วยทางเลือกที่กระชับยิ่งขึ้นโดยใช้ -replace
ตัวดำเนินการ พร้อม บล็อกสคริปต์ ({ ... }
) ซึ่งต้องใช้ PowerShell Core (v6.1+):
PSCore> '1.2.3.50' -replace '\d+', { '{0:D3}' -f [int] $_.Value }
001.002.003.050
บล็อกสคริปต์ถูกเรียกสำหรับทุกการจับคู่ของ regex \d+
(หนึ่งหลักขึ้นไป) และ $_
ภายในบล็อกสคริปต์อ้างถึง System.Text.RegularExpressions.Match
ที่แสดงถึงการแข่งขันในมือ; คุณสมบัติ .Value
มีข้อความที่ตรงกัน (สตริง)
System.Text.RegularExpressions.Match
ที่ $_
อ้างถึง
- person mklement0; 24.09.2019