|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Переменная Дня недели |
|
CMD/BAT - [решено] Переменная Дня недели
|
Пользователь Сообщения: 112 |
Профиль | Отправить PM | Цитировать Всем доброе время суток!
Подскажите, пожалуйста, какую команду нужно написать, чтобы создать папку с именем текущего дня недели? Заранее благодарен! |
|
Отправлено: 17:27, 10-03-2009 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать решил свести все вместе, c поддержкой серверных ОС (ненужное можно удалить):
@Echo Off For /F "Skip=1" %%i In ('WMIC Path Win32_LocalTime Get Day') Do Set $Day=%%i&GoTo Day :Day For /F "Skip=1" %%i In ('WMIC Path Win32_LocalTime Get Month') Do Set $Month=%%i&GoTo Month :Month For /F "Tokens=%$Month% Delims=," %%i In ("Январь,Февраль,Март,Апрель,Май,Июнь,Июль,Август,Сентябрь,Октябрь,Ноябрь,Декабрь") Do Set $MonthName=%%i For /F "Skip=1" %%i In ('WMIC Path Win32_LocalTime Get Year') Do Set $Year=%%i&GoTo Year :Year For /F "Skip=1" %%i In ('WMIC Path Win32_LocalTime Get DayOfWeek') Do Set /A $DayOfWeek=%%i+1&GoTo DayOfWeek :DayOfWeek For /F "Tokens=%$DayOfWeek% Delims=," %%i In ("Воскресенье,Понедельник,Вторник,Среда,Четверг,Пятница,Суббота") Do Set $DayOfWeekName=%%i For /F "Skip=1" %%i In ('WMIC Path Win32_LocalTime Get WeekInMonth') Do Set $WeekInMonth=%%i&GoTo WeekInMonth :WeekInMonth For /F "Skip=1" %%i In ('WMIC Path Win32_LocalTime Get Hour') Do Set $Hour=%%i&GoTo Hour :Hour For /F "Skip=1" %%i In ('WMIC Path Win32_LocalTime Get Minute') Do Set $Minute=%%i&GoTo Minute :Minute For /F "Skip=1" %%i In ('WMIC Path Win32_LocalTime Get Second') Do Set $Second=%%i&GoTo Second :Second Echo -------------------------------------- Echo День : %$Day% Echo Месяц : %$MonthName% (%$Month%-й месяц года) Echo Год : %$Year% Echo -------------------------------------- Echo День недели : %$DayOfWeekName% (%$DayOfWeek%-й день недели) Echo Неделя месяца: %$WeekInMonth% Echo -------------------------------------- Echo Часов : %$Hour% Echo Минут : %$Minute% Echo Секунд : %$Second% Echo -------------------------------------- |
Последний раз редактировалось amel27, 16-04-2009 в 07:12. Причина: исправлена ошибка с днями недели Отправлено: 11:41, 15-04-2009 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ушёл из жизни Сообщения: 6021
|
Профиль | Отправить PM | Цитировать amel27, а в чем смысл GoTo? Без них вроде и так будет переходить на следующую строку. Немного причесал, чтобы не "рябило в глазах".
@Echo Off Call :GetVar Day Call :GetVar Month For /F "Tokens=%$Month%" %%i In ("Январь Февраль Март Апрель Май Июнь Июль Август Сентябрь Октябрь Ноябрь Декабрь") Do Set $MonthName=%%i Call :GetVar Year Call :GetVar DayOfWeek For /F "Tokens=%$DayOfWeek%" %%i In ("Понедельник Вторник Среда Четверг Пятница Суббота Воскресенье") Do Set $DayOfWeekName=%%i Call :GetVar WeekInMonth Call :GetVar Hour Call :GetVar Minute Call :GetVar Second Echo -------------------------------------- Echo День : %$Day% Echo Месяц : %$MonthName% (%$Month%-й месяц года) Echo Год : %$Year% Echo -------------------------------------- Echo День недели : %$DayOfWeekName% (%$DayOfWeek%-й день недели) Echo Неделя месяца: %$WeekInMonth% Echo -------------------------------------- Echo Часов : %$Hour% Echo Минут : %$Minute% Echo Секунд : %$Second% Echo -------------------------------------- Pause>nul Exit :GetVar For /F "Skip=1" %%i In ('WMIC Path Win32_LocalTime Get %1') Do Set $%1=%%i GoTo :EOF |
Отправлено: 13:29, 15-04-2009 | #12 |
Железных Дел Мастер Сообщения: 24527
|
Профиль | Сайт | Отправить PM | Цитировать Цитата gora:
ОС 2003R2_SP2_Ru Скрипт подумал секунд несколько и выдал следующее: Цитата:
в отличие от варианта amel27 Цитата:
|
|||
------- Отправлено: 15:03, 15-04-2009 | #13 |
Сообщения: 53173
|
Профиль | Отправить PM | Цитировать amel27, gora, я бы сделал так:
@Echo Off SetLocal EnableExtensions EnableDelayedExpansion For /F "Tokens=1* Delims==" %%i In ('WMIC Path Win32_LocalTime Get /Value ^| Find "="') Do ( Set V=%%j Set $%%i=!V:~0,-1! ) If "%$DayOfWeek%"=="0" Set $DayOfWeek=7 For /F "Tokens=%$Month%" %%i In ("Январь Февраль Март Апрель Май Июнь Июль Август Сентябрь Октябрь Ноябрь Декабрь") Do Set $MonthName=%%i For /F "Tokens=%$DayOfWeek%" %%i In ("Понедельник Вторник Среда Четверг Пятница Суббота Воскресенье") Do Set $DayOfWeekName=%%i Echo -------------------------------------- Echo День : %$Day% Echo Месяц : %$MonthName% (%$Month%-й месяц года) Echo Год : %$Year% Echo -------------------------------------- Echo День недели : %$DayOfWeekName% (%$DayOfWeek%-й день недели) Echo Квартал : %$Quarter% Echo -------------------------------------- Echo Часов : %$Hour% Echo Минут : %$Minute% Echo Секунд : %$Second% Echo -------------------------------------- Pause>nul Exit
|
Последний раз редактировалось Petya V4sechkin, 15-04-2009 в 15:35. Отправлено: 15:07, 15-04-2009 | #14 |
Ушёл из жизни Сообщения: 6021
|
Профиль | Отправить PM | Цитировать Цитата ShaddyR:
Petya V4sechkin, красиво! |
|
Отправлено: 15:26, 15-04-2009 | #15 |
Сообщения: 53173
|
Профиль | Отправить PM | Цитировать Цитата gora:
Бороться можно разными способами: либо вариант amel27 (присвоить значение и сразу выход из цикла через GoTo), либо опцией /Value (чтобы выводилось в формате свойство=значение), а также каналом через Find (чтобы исключить пустые строки вообще). |
|
Отправлено: 15:40, 15-04-2009 | #16 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать - Без Value можно за раз несколько значений (порядок переменных WMIC ставит свой);
- имя выходной переменной может быть произвольным; - можно обойтись и без GoTo: @Echo Off For /F "Tokens=1,2 Skip=1" %%i In ('WMIC Path Win32_LocalTime Get Month^,Year') Do If Not "%%j"=="" Set $Month=%%i&Set $Year=%%j For /F "Tokens=%$Month% Delims=," %%i In ("Январь,Февраль,Март,Апрель,Май,Июнь,Июль,Август,Сентябрь,Октябрь,Ноябрь,Декабрь") Do Set $MonthName=%%i Set /A $Season = ($Month-$Month/12*12)/3+1 Set /A $MonthInSeason = $Month-$Month/12*12-(%$Season%-1)*3+1 For /F "Tokens=%$Season% Delims=," %%i In ("Зимы,Весны,Лета,Осени") Do Set $SeasonGenitive=%%i Echo На дворе %$MonthName% - %$MonthInSeason%-й месяц %$SeasonGenitive% Цитата gora:
|
|
Отправлено: 06:11, 16-04-2009 | #17 |
Пользователь Сообщения: 62
|
Профиль | Отправить PM | Цитировать Из под "Администратора" всё отлично работает, а вот из под "Оператора архива" пишет:
Цитата:
Попробовал другой скрипт (подсмотренный на ixbt): @echo off echo.>"%TEMP%\~.ddf" makecab /D RptFileName="%TEMP%\~.rpt" /D InfFileName="%TEMP%\~.inf" -f "%TEMP%\~.ddf">nul for /f "tokens=3" %%a in ('type "%TEMP%\~.rpt"') do if not defined weekday set "weekday=%%a" echo %weekday% del /q "%TEMP%\~.*" pause igor_andreev (c) А когда запускаю через планировщик .cmd файл от того же пользователя - не работает. |
|
Последний раз редактировалось decadent, 02-10-2010 в 23:28. Отправлено: 21:50, 02-10-2010 | #18 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата decadent:
Цитата decadent:
могу еще предложить чистый CMD метод, с использованием ф-ции :DateToWeek |
||
Отправлено: 06:52, 03-10-2010 | #19 |
Пользователь Сообщения: 62
|
Профиль | Отправить PM | Цитировать Похоже, что проблема была в другом.
Я изначально пошел по неверному пути, когда у меня возникла проблема с запуском задания из планировщика от имени пользователя, входящего в группу "Операторы архива". Проблема была в том, что когда я входил локально от имени этого пользователя и запускал .cmd файл всё нормально работало, а при запуске того же файла через планировщик, ругалось на отсутствие прав. Воспользовался неправильным советом http://forum.ixbt.com/topic.cgi?id=7:35541#11 и скопировал файл cmd.exe в папку с батниками и запускал оттуда, а надо было всего лишь права на запуск для cmd.exe прописать... Вот скрипт, который всё-таки заработал от Оператора архива: @echo off echo %date% set /a y=%date:~6,4%&set /a m=1%date:~3,2%-100&set /a d=1%date:~0,2%-100 set /a i=(%y%-1901)*365 + (%y%-1901)/4 + %d% + (!(%y% %% 4))*(!((%m%-3)^&16)) set /a i=(%i%+(%m%-1)*30+2*(!((%m%-7)^&16))-1+((65611044^>^>(2*%m%))^&3))%%7+1 for /f "tokens=%i% delims=/" %%a in (' echo/Monday/Tuesday/Wednesday/Thursday/Friday/Saturday/Sunday') do set "w=%%a" for /f "tokens=%m% delims=/" %%a in (' ECHO/January/February/March/April/May/June/July/August/September/October/November/December') do set "mmm=%%a" C:\WINDOWS\system32\ntbackup.exe backup \\Fileserver\test /v:yes /m normal /j "FULL backup test - every %w%..." /l:s /f "\\Server\backup$\test-%w%.bkf" "C:\Program Files\7-Zip\7z.exe" a \\Server\Backup$\test-%w%.7z -test -mhe -ssw \\Server\backup$\test-%w%.bkf del \\Server\backup$\test-%w%.bkf |
Отправлено: 10:37, 03-10-2010 | #20 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
[решено] как сделать доступ к папкам по дням недели? | Steven21 | Microsoft Windows NT/2000/2003 | 15 | 10-12-2009 17:11 | |
Глобальная переменная | 11943499 | AutoIt | 9 | 23-07-2009 20:58 | |
[решено] Выход из функции, если переменная не задана | D_Master | AutoIt | 2 | 19-02-2009 15:05 | |
Интерфейс - [решено] Дни недели и месяца на украинском!Как убрать? | Voodoo Child | Microsoft Windows Vista | 3 | 07-04-2008 11:06 | |
День недели | Hard | Программирование и базы данных | 5 | 23-09-2002 07:27 |
|