ค้นหาเว็บไซต์

Friday Fun: มีใครรู้บ้างว่าตอนนี้กี่โมงแล้ว?


ไม่มี cmdlet สำหรับสิ่งเหล่านี้ ดังนั้นคุณจะต้องพึ่งพาเทคนิค .NET บางอย่าง แต่ไม่ต้องกังวล คุณไม่จำเป็นต้องละทิ้งการเป็นผู้เชี่ยวชาญด้านไอที ขั้นตอนนั้นง่ายมาก แม้ว่าจะดูแปลกไปสำหรับคุณก็ตาม ก่อนอื่น มาดูวันในสัปดาห์กันก่อน สิ่งเหล่านี้ถูกเก็บไว้อย่างดีในคลาส .NET ที่เรียกว่า DayOftheWeek ซึ่งเป็น Enum นั่นเป็นเพียงวิธีการพูด "รายการ" ที่หรูหรา ต่อไปนี้คือวิธีที่คุณสามารถแสดงรายการ "รายการ"

PS C:\> [enum]::GetValues([dayofweek])
Sunday
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday

ค่อนข้างเท่ห์ ฉันไม่มีระบบที่ใช้ PowerShell ในภาษาอื่น แต่ฉันคิดว่าคุณค่าเหล่านี้จะสะท้อนถึงวัฒนธรรมของคุณ เท่าที่ฉันรู้สิ่งนี้ควรจะใช้ได้กับ PowerShell เวอร์ชันใดก็ได้ คุณสามารถทำอะไรกับสิ่งนี้? บางทีคุณอาจต้องการโฟลเดอร์สำหรับแต่ละวันในสัปดาห์

[enum]::GetValues([dayofweek]) | foreach {
  mkdir "c:\work\$_"
}

ฉันนำแต่ละค่าและเพิ่มลงใน C:\Work เพื่อสร้างโฟลเดอร์รายวันที่เกี่ยวข้อง ต่อไป มาดูวิธีดำเนินการกับชื่อเดือนกัน

ขออภัย ไม่มีคลาส Enum สำหรับชื่อเดือน แต่ข้อมูลเป็นส่วนหนึ่งของคลาสโลกาภิวัตน์ที่สอดคล้องกับวัฒนธรรมคอมพิวเตอร์ของคุณ นี่คือวิธีการทำงานสำหรับฉัน

PS C:\> [System.Globalization.DateTimeFormatInfo]::CurrentInfo.MonthNames

January
February
March
April
May
June
July
August
September
October
November
December

ขอย้ำอีกครั้งว่าระบบที่ไม่ใช่ภาษาอังกฤษควรได้รับเดือนในภาษาของคุณ มีข้อบกพร่องเล็กน้อยประการหนึ่งเกี่ยวกับเรื่องนี้ ด้วยเหตุผลบางอย่าง จึงมีเดือนที่ 13 ลึกลับที่ไม่มีชื่อ


PS C:\> [System.Globalization.DateTimeFormatInfo]::CurrentInfo.MonthNames | measure

Count    : 13
Average  : 
Sum      : 
Maximum  : 
Minimum  : 
Property : 

หากต้องการแก้ไขปัญหานี้ เพียงกรองค่าต่างๆ

[System.Globalization.DateTimeFormatInfo]::CurrentInfo.MonthNames | where {$_} 

เราสามารถใช้เทคนิคเดียวกันนี้เพื่อสร้างชุดโฟลเดอร์รายเดือนได้เช่นกัน


[System.Globalization.DateTimeFormatInfo]::CurrentInfo.MonthNames |
where { $_ } | foreach -begin { mkdir C:\Work\2014 } -process {
  mkdir "c:\work\2014\$_"
}

ฉันส่งชื่อแต่ละเดือนไปที่ ForEach-Object ในการเริ่มต้น scriptblock ฉันได้สร้างโฟลเดอร์ปีระดับบนสุดและในกระบวนการ scriptblock โฟลเดอร์สำหรับแต่ละเดือน หรือบางทีคุณอาจต้องการหลีกเลี่ยงค่าฮาร์ดโค้ดเช่น 2014 หรือรวมปีไว้ในชื่อโฟลเดอร์


[System.Globalization.DateTimeFormatInfo]::CurrentInfo.MonthNames |
where { $_ } |
foreach -begin {$yr = (Get-Date).year} -process { mkdir "c:\work\$_`_$yr" }

ที่นี่ฉันได้รับปีปัจจุบันในบล็อก Begin แล้วต่อท้ายชื่อโฟลเดอร์ หากฉันเรียกใช้วันนี้ ฉันจะได้โฟลเดอร์เช่น C:\Work\January_2013 โปรดทราบว่าเนื่องจากฉันใช้ขีดล่าง ฉันจึงต้องหลีกเลี่ยงมัน

สุดท้ายนี้ หากคุณต้องการใช้เดือนแบบย่อ คุณก็สามารถทำได้เช่นกัน

[System.Globalization.DateTimeFormatInfo]::CurrentInfo.AbbreviatedMonthNames | 
where { $_ } |
foreach -begin {$yr = (Get-Date).year} -process { mkdir "c:\work\$_`_$yr" }

ที่นี่คุณต้องกรองเดือนว่างลึกลับออกเช่นกัน

ดังนั้นวางแผนล่วงหน้าสำหรับปีหน้าและหวังว่ามันจะเป็นปีที่ดีสำหรับคุณ

บทความที่เกี่ยวข้อง