Показать полную графическую версию : [решено] Заменить Имя месяца на цифру
есть переменная с месяцами:
[array]$Times = "January" , "February" , "March" , "April" , "May" , "June" , "July" , "August" , "September" , "October" , "November" , "December"
на что нужно поменять переменную в цикле:
$File = "myfile-1.July.2015"
foreach ($T in $Times) {
$File = $File.Replace($T,??)
}
чтобы на выходе было myfile-1.7.2015
$m = [datetime]::ParseExact($T,"MMMM",[Globalization.CultureInfo]::InvariantCulture).Month
$File = $File.Replace($T,$m)
Или создать hashtable^
$Times = @{
"January" = 1
"February" = 2
}
foreach ($T in $Times.GetEnumerator()) {
$File = $File.Replace($T.Name,$T.Value)
}
Foreigner
08-12-2015, 19:39
$Times = "January","February","March","April","May","June","July","August","September","October","November","December"
$File = "myfile-1.July.2015"
foreach ($T in $Times)
{
$File = $File.Replace($T,($Times.indexof($T) + 1))
}
$File
greg zakharov
08-12-2015, 20:26
Foreigner, едва ли кто-то в здавом уме и трезвой памяти станет строчить массив названий месяцев вручную. Kazun в этом плане более лаконичен. Есть еще вариант, не столь лаконичный, но без создания массива названий месяцев вручную:$File = 'myfile-1.July.2015'
$j = ($i = (
$$ = [Globalization.DateTimeFormatInfo]::InvariantInfo.MonthNames
).IndexOf(
$$.Where({$File -match $_})[0]
)) + 1
$File.Replace($$[$i], $j)
Foreigner
08-12-2015, 20:35
greg zakharov,
есть переменная с месяцами: »
greg zakharov
08-12-2015, 20:46
Foreigner, так незаметно форум с Вашей помощью превращается в цитатник.
Foreigner
08-12-2015, 21:06
greg zakharov, Я заметил другую тенденцию, Ваше стремление со всеми поссориться
Спасибо всем кто ответил, я думал о варианте Foreigner, все варианты интересные и разберу их, спасибо
greg zakharov, ваш метод вывалил ошибку:
Сбой вызова метода из-за отсутствия в [System.String] метода с именем "Where".
+ $$ = [Globalization.DateTimeFormatInfo]::InvariantInfo.MonthNames
и
Сбой операции индексирования, индекс массива вычислен как NULL.
+ $File.Replace($$[$i], $j)
Kazun, а ваш метод(который первый) крутой, даже не могу понять как он работает, справочку?:)
даже не могу понять как он работает, справочку? »
CultureInfo.InvariantCulture Property (System.Globalization) (https://technet.microsoft.com/en-us/library/system.globalization.cultureinfo.invariantculture) → DateTime.ParseExact Method (String, String, IFormatProvider) (System) (https://technet.microsoft.com/en-us/library/w2sa9yss(v=vs.110)) → DateTime.Month Property (System) (https://technet.microsoft.com/en-us/library/system.datetime.month(v=vs.110)).
greg zakharov
09-12-2015, 11:16
Сбой вызова метода из-за отсутствия в [System.String] метода с именем "Where".Версию PowerShell озвучьте, ибо писано было на четверке.
greg zakharov, Да у меня видимо только 3.
$PSVersionTable.PSVersion
Major Minor Build Revision
----- ----- ----- --------
3 0 -1 -1
Iska, Так это вызов .NET, только я вот не могу понять как можно сообразить когда средства PS заканчиваются и нужно копать так глубоко, вот не зная .NET же невозможно догадаться до подобного вызова
не зная .NET же невозможно догадаться до подобного вызова »
Совершенно верно. PoSH — это .Net. И, Вы правы — тут только именно знать.
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.