Cuma Eğlencesi: Saatin Kaç Olduğunu Gerçekten Bilen Var mı?


Bu tür şeyler için herhangi bir cmdlet yoktur, dolayısıyla bazı .NET tekniklerine güvenmeniz gerekecek, ancak endişelenmeyin. BT Uzmanı olmaktan vazgeçmenize gerek yok. Size biraz yabancı görünse de adımlar çok kolaydır. Öncelikle haftanın günlerini alalım. Bunlar, bir Enum olan DayOftheWeek adlı bir .NET sınıfında güzel bir şekilde depolanır. Bu sadece bir “liste” demenin süslü bir yolu. “Listeyi” şu şekilde listeleyebilirsiniz.

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

Oldukça havalı. PowerShell'i farklı bir dilde çalıştıran bir sistemim yok ancak bu değerlerin kültürünüzü yansıtacağını varsayıyorum. Bildiğim kadarıyla bunun PowerShell'in herhangi bir sürümünde çalışması gerekiyor. Bununla ne yapabilirsiniz? Belki haftanın her günü için bir klasöre ihtiyacınız vardır.

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

Her değeri aldım ve ilgili günlük klasörü oluşturmak için C:\Work'e ekledim. Şimdi ay adlarını nasıl yapacağımızı bulalım.

Ne yazık ki ay adları için Enum sınıfı yoktur. Ancak bilgi, bilgisayar kültürünüze karşılık gelen küreselleşme sınıfının bir parçasıdır. İşte benim için nasıl çalışıyor.

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

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

Tekrar ediyorum, İngilizce olmayan sistemler sizin dilinizde aylarca eğitim almalıdır. Bu konuda ufak bir hata var. Nedense ismi bilinmeyen gizemli bir 13. ay var.


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

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

Bunu aşmak için değerleri filtrelemeniz yeterlidir.

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

Aynı tekniği bir dizi aylık klasör oluşturmak için de kullanabiliriz.


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

Her ayın adını ForEach-Object'e aktardım. Begin scriptblock'ta üst düzey bir yıl klasörü oluşturdum ve süreçte scriptblock'ta her ay için bir klasör oluşturdum. Veya belki de 2014 gibi sabit kodlanmış değerlerden kaçınmak veya yılı klasör adına dahil etmek isteyebilirsiniz.


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

Burada geçerli yılı Begin bloğuna alıyorum ve ardından onu klasör adına ekliyorum. Bunu bugün çalıştırırsam C:\Work\January_2013 gibi bir klasörle karşılaşacağım. Alt çizgi kullandığım için bundan kaçmak zorunda kaldığımı unutmayın.

Son olarak, kısaltılmış ayları tercih ediyorsanız bunu da yapabilirsiniz.

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

Burada da gizemli sıfır ayını filtrelemeniz gerekiyor.

Gelecek yıl için önceden plan yapın, umarım sizin için harika olur.

İlgili makaleler