Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Можно решить задачку элегантней, но для этого придется предварительно скомпилировать WMIC псевдоним для WMI класса Win32_LocalTime, после этого можно будет легко получать любые параметры текущей даты, включая номер квартала, номер недели в месяце и т.д. MOF-файл (файл в WIN-кодировке):
Код: Выделить весь код
#pragma namespace("\\\\.\\ROOT\\Cli")

instance of MSFT_CliAlias
{
Connection =
instance of MSFT_CliConnection
{
Locale = "ms_409";
NameSpace = "ROOT\\CIMV2";
Server = ".";
};
Description = "Местное время";
Formats = 
{
instance of MSFT_CliFormat
{
Format = "TABLE";
Name = "BRIEF";
Properties = 
{
instance of MSFT_CliProperty            
{
Derivation = "DayOfWeek";
Description = "День недели";
Name = "DayOfWeek";
}, 
instance of MSFT_CliProperty
{
Derivation = "Year";
Description = "Год";
Name = "Year";
},
instance of MSFT_CliProperty
{
Derivation = "Month";
Description = "Месяц";
Name = "Month";
},
instance of MSFT_CliProperty
{
Derivation = "Day";
Description = "Число";
Name = "Day";
}, 
instance of MSFT_CliProperty
{
Derivation = "Hour";
Description = "Часы";
Name = "Hour";
},
instance of MSFT_CliProperty
{
Derivation = "Minute";
Description = "Минуты";
Name = "Minute";
},
instance of MSFT_CliProperty
{
Derivation = "Second";
Description = "Секунды";
Name = "Second";
}};
}, 
instance of MSFT_CliFormat
{
Format = "VALUE";
Name = "FULL";
Properties = 
{
instance of MSFT_CliProperty            
{
Derivation = "DayOfWeek";
Description = "День недели";
Name = "DayOfWeek";
}, 
instance of MSFT_CliProperty            
{
Derivation = "WeekInMonth";
Description = "Неделя месяца";
Name = "WeekInMonth";
}, 
instance of MSFT_CliProperty
{
Derivation = "Year";
Description = "Год";
Name = "Year";
},
instance of MSFT_CliProperty
{
Derivation = "Quarter";
Description = "Квартал";
Name = "Quarter";
},
instance of MSFT_CliProperty
{
Derivation = "Month";
Description = "Месяц";
Name = "Month";
},
instance of MSFT_CliProperty
{
Derivation = "Day";
Description = "Число";
Name = "Day";
}, 
instance of MSFT_CliProperty
{
Derivation = "Hour";
Description = "Часы";
Name = "Hour";
},
instance of MSFT_CliProperty
{
Derivation = "Minute";
Description = "Минуты";
Name = "Minute";
},
instance of MSFT_CliProperty
{
Derivation = "Second";
Description = "Секунды";
Name = "Second";
},
instance of MSFT_CliProperty
{
Derivation = "MilliSeconds";
Description = "Миллисекунды";
Name = "MilliSeconds";
}};
}, 
instance of MSFT_CliFormat
{
Format = "Table";
Name = "SYSTEM";
Properties = 
{
instance of MSFT_CliProperty
{
Derivation = "__PATH";
Name = "__PATH";
}, 
instance of MSFT_CliProperty
{
Derivation = "__NAMESPACE";
Name = "__NAMESPACE";
}, 
instance of MSFT_CliProperty
{
Derivation = "__SERVER";
Name = "__SERVER";
}, 
instance of MSFT_CliProperty
{
Derivation = "__PROPERTY_COUNT";
Name = "__PROPERTY_COUNT";
}, 
instance of MSFT_CliProperty
{
Derivation = "__RELPATH";
Name = "__RELPATH";
}, 
instance of MSFT_CliProperty
{
Derivation = "__DYNASTY";
Name = "__DYNASTY";
}, 
instance of MSFT_CliProperty
{
Derivation = "__SUPERCLASS";
Name = "__SUPERCLASS";
}, 
instance of MSFT_CliProperty
{
Derivation = "__GENUS";
Name = "__GENUS";
}, 
instance of MSFT_CliProperty
{
Derivation = "__CLASS";
Name = "__CLASS";
}};
}};
FriendlyName = "LocalTime";
PWhere = "Where Name='#'";
Target = "Select * From Win32_LocalTime";
};
Процедура компиляции (через MOFComp) одноразовая, но можно реализовать условную компиляцию... Например, если имя MOF-файла совпадает с именем CMD-файла, то для обеспечения корректной работы батника на любом компьютере можно добавить в начало скрипта две строчки:
Код: Выделить весь код
WMIC LocalTime Get DayOfWeek >Nul
If ErrorLevel 1 MOFComp "%~dpn0.mof"
пример батника, использующего созданный псевдоним (DOS-кодировка):
Код: Выделить весь код
@Echo Off

For /F "Skip=1" %%i In ('WMIC LocalTime Get DayOfWeek') Do Set DayOfWeek=%%i
For /F "Tokens=%DayOfWeek% Delims=," %%i In ("Понедельник,Вторник,Среда,Четверг,Пятница,Суббота,Воскресенье") Do Set DayOfWeekName=%%i

Echo Сегодня %DayOfWeekName%,
Echo это %DayOfWeek%-й день недели
Это сообщение посчитали полезным следующие участники:

Отправлено: 05:07, 13-03-2009 | #8