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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Как сравнить %DATE% с установленной в ручную датой??

Ответить
Настройки темы
CMD/BAT - Как сравнить %DATE% с установленной в ручную датой??

Новый участник


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

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


Пишу небольшую программку! столкнулся с проблемой никак не пойму как сравнить %DATE% с датой которая мне нужна!
вот пример:
@echo off
copy 111.bat C:\Windows\system
reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v 111 /t REG_SZ /d C:\Windows\system\111.bat /f>nul
CHCP 1251
IF %DATE%==10.02.2010 GOTO abc
EXIT
:abc

Тут дальнейшие выполняемые действия программки

EXIT

Так он сравнивает только с 10.02.2010 а мне надо чтобы он проверял начиная с 10 числа. Как бы параметр => (больше либо равно)
Потому что если 10.02.2010 компьютер не был включен то и батник этот не заработает.

Помогите пожалуста, перерыл все что мог... нигде не могу найти ответа, а типичной функйии => как я понял нет.

Отправлено: 14:06, 10-02-2010

 

Аватара для gora

Ушёл из жизни


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

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


[решено] Как сделать,что б батник проверял число ?

Цитата angelada89:
а типичной функйии => как я понял нет. »
Есть, но форма записи иная. Смотрите If /?

Последний раз редактировалось gora, 10-02-2010 в 14:25. Причина: добавил


Отправлено: 14:11, 10-02-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


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

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


это вот такой будет конечный результат?


@echo off
copy 111.bat C:\Windows\system
reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v 111 /t REG_SZ /d C:\Windows\system\111.bat /f>nul
CHCP 1251
IF %date:~6,4%%date:~3,2%%date:~0,2% GTR 20100328 GOTO abc
EXIT
:abc

Тут дальнейшие выполняемые действия программки

EXIT

Если это правльно! то возникает сразу следующий вопрос! А можно ли сделать так что когда ты ставишь прогу она к текущей дате прибавила определенное кол-во дней и потом уже проверяла именно от даты которая получится!
Это как бы надо прибавить к дате текущей дни, месяца и года , потом записать это в переменную и сравнивать уже с переменной.... такое вообще возможно?? Буду очень признателен если получится

вот так было бы удобне просто с функцией => (линк почему то не работает!) можете ссылку перезалить

if /? не к чему не привел я уже это не раз читал все никак не пойму как поставить чтобы параметр был больше либо равно!

Если знаете помогите пожалуста просто горит уже надо очень сильно написать......

Отправлено: 14:27, 10-02-2010 | #3


Аватара для gora

Ушёл из жизни


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

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


Цитата angelada89:
if /? не к чему не привел я уже это не раз читал все никак не пойму как поставить чтобы параметр был больше либо равно! »
Цитата:
Изменение команды IF при включении расширенной обработки команд:

IF [/i] строка1 оператор_сравнения строка2 команда

где оператор_сравнения принимает следующие значения:

EQU - равно (в оригинале справки написано EQL, но это ошибка переводчиков справки)
NEQ - не равно
LSS - меньше
LEQ - меньше или равно
GTR - больше
GEQ - больше или равно
Цитата angelada89:
сделать так что когда ты ставишь прогу она к текущей дате прибавила определенное кол-во дней и потом уже проверяла именно от даты которая получится! »
Непонятна задача. Какая прога? Какую дату она должна менять? В системе? В батнике? Запускается она из этого же батника? Распишите все подробно и с "числовыми" примерами.

Отправлено: 14:40, 10-02-2010 | #4


Новый участник


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

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


@echo off
copy vrem.bat C:\Windows\system
reg add HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /v vrem /t REG_SZ /d C:\Windows\system\vrem.bat /f>nul
CHCP 1251
IF /i '%DATE%' GEQ '12.02.2010' goto abc
goto end
:abc
msg * "бла бла бла бла ..."
:end
EXIT


так?? почучается если дата больше чем 12.02.2010 он выдаст сообщение!

теперь то что было не понятно! вот я запустил батник на компе! надо чтобы он определил дату, к этой дате прибавил кол-во дней заданных мною например 5 дней. и в дальнейшем сравнивал уже с новой датой тоесть не с 12.02.2010 а с просчитанной датой которая на 5 дней больше чем дата в момент запуска батника

Отправлено: 14:55, 10-02-2010 | #5


Аватара для gora

Ушёл из жизни


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

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


Цитата angelada89:
так?? почучается если дата больше чем 12.02.2010 он выдаст сообщение! »
Нет, не так. Так он у Вас будет корректно работать до конца февраля, а первого марта работать корректно перестанет. Правильно так:
Код: Выделить весь код
IF %date:~6,4%%date:~3,2%%date:~0,2% GEQ 20100212 GOTO abc
Цитата angelada89:
к этой дате прибавил кол-во дней заданных мною например 5 дней. и в дальнейшем сравнивал уже с новой датой тоесть не с 12.02.2010 а с просчитанной датой которая на 5 дней больше чем дата в момент запуска батника »
Т.е., если я запустил его сегодня, то сравнивать надо с 17.02.2010, а если запустил завтра, то с тем же числом 17.02.2010 или с 18.02.2010? Если первое, то где батник должен хранить эту дату, во внешнем файле? И где будет прописано это число (5 дней), в самом батнике или будет ему передаваться в переменной?

Отправлено: 15:13, 10-02-2010 | #6


Новый участник


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

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


IF %date:~6,4%%date:~3,2%%date:~0,2% GEQ 20100212 GOTO abc на счет этого понял! уже сам допер и исправил!
а вот на счет 5 дней вы не так поняли
я запустил батник сегодня надо с сегоднящней даты прибавить опрелделенное кол-во дней.
принцип триальных программ! сегодня запустил сегодня отсчет и пошел! как прошло 30 дней так прога перестала работать! а тут как прошло допустим 5 дней то прога выдала сообщение..


я так понимаю надо будет писать IF %date:~6,4%%date:~3,2%%date:~0,2% GEQ 20100212 GOTO abc
только место 20100212 нужна будет переменная! а эту переменную батник сам посчитает при запуске ! смысл такой что я запустил батник выЯвил сегодняшнее число, прибавил к нему 5-10 -20 дней на свое усмотрение и далее уже IF %date:~6,4%%date:~3,2%%date:~0,2% GEQ Peremennaya GOTO abc
все это будет в 1 батнике.

1. Запуск батника
2. выявление сегодняшнего числа
3. прибавка к нему кол-ва дней и сохранение новой даты как переменная
4. сравнение текущей даты с переменной
5. ну а далее там понятно уже деййствия по условию

Отправлено: 15:31, 10-02-2010 | #7


Новый участник


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

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


такс вот код который прибавляет дни начиная с запуска!

@echo off
set T_Date=%DATE%
IF %T_DATE:~0,1%==0 (
SET /A T_DAY=%T_DATE:~1,1%) else (
SET /A T_DAY=%T_DATE:~0,2%)

IF %T_DATE:~3,1%==0 (
SET /A T_MONTH=%T_DATE:~4,1%) else (
SET /A T_MONTH=%T_DATE:~3,2%)
SET /A T_YEAR=%T_DATE:~6,4%

SET /A T_DAY=%T_DAY%+31

IF %T_DAY% GTR 31 SET /A T_MONTH=%T_MONTH%+1
IF %T_MONTH% GTR 12 SET /A T_YEAR=%T_YEAR%+1
if %T_MONTH%==1 Set /A DIM=31
if %T_MONTH%==2 Set /A DIM=28
if %T_MONTH%==3 Set /A DIM=31
if %T_MONTH%==4 Set /A DIM=30
if %T_MONTH%==5 Set /A DIM=31
if %T_MONTH%==6 Set /A DIM=30
if %T_MONTH%==7 Set /A DIM=31
if %T_MONTH%==8 Set /A DIM=31
if %T_MONTH%==9 Set /A DIM=30
if %T_MONTH%==10 Set /A DIM=31
if %T_MONTH%==11 Set /A DIM=30
if %T_MONTH%==12 Set /A DIM=31
IF %T_DAY% GTR 31 SET /A T_DAY=%T_DAY%-%DIM%
IF %T_MONTH% GTR 12 SET /A T_MONTH=1

echo %T_DAY%.%T_MONTH%.%T_YEAR%

pause

Есть 2 проблемы в нем :
1) это когда месяц январь то после того как он прибавит 30 дней то выдает дни типа 32, 33, 34 ,35 и так далее! это только с январем с другими месецами вроде нормально.
2) вторая проблемка что когда он прибавляет дни он считает не правильно! типа было 10 февраля он прибавил 30 дней и стало не 12 как должно быть, а 8.

Отправлено: 18:38, 10-02-2010 | #8


Googler


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

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


исправленный вариант моего старого скрипта, тестируйте:
Код: Выделить весь код
@Echo Off
SetLocal EnableExtensions EnableDelayedExpansion

SET SIGN=+
SET DAYS=31

If %DATE:~0,1%==0 (Set T_DAY=%DATE:~1,1%) Else Set T_DAY=%DATE:~0,2%
If %DATE:~3,1%==0 (Set T_MONTH=%DATE:~4,1%) Else Set T_MONTH=%DATE:~3,2%
Set T_YEAR=%DATE:~6,4%

:SkipDays
 Call :NextDay %SIGN%1
 Set /A DAYS=%DAYS%-1
If %DAYS% NEQ 0 GoTo :SkipDays

Set T_DAY=0%T_DAY%& Set T_MONTH=0%T_MONTH%
Echo %T_DAY:~-2%.%T_MONTH:~-2%.%T_YEAR%
Exit /B 0

:NextDay
 Call :GetDaysOfMonth
 Set /A T_DAY=%T_DAY%%~1
 If %T_DAY% GTR !T_DOFM! (
   Call :NextMonth +1
   Call :GetDaysOfMonth
   Set T_DAY=1
 )
 If %T_DAY% EQU 0 (
   Call :NextMonth -1
   Call :GetDaysOfMonth
   Set T_DAY=!T_DOFM!
 )
GoTo :EOF

:NextMonth
 Set /A MNDF=%T_YEAR%*12+%T_MONTH%%1
 Set /A T_YEAR=(%MNDF%-1)/12
 Set /A T_MONTH=%MNDF%-%T_YEAR%*12
GoTo :EOF

:GetDaysOfMonth
 Set /A M1=T_YEAR-(T_YEAR/4)*4
 Set /A M2=T_YEAR-(T_YEAR/100)*100
 Set /A M3=T_YEAR-(T_YEAR/400)*400

 Set $MD=31 28 31 30 31 30 31 31 30 31 30 31
 If 0 EQU %M1% IF 0 NEQ %M2% Set $MD=31 29 31 30 31 30 31 31 30 31 30 31
 If 0 EQU %M3% Set $MD=31 29 31 30 31 30 31 31 30 31 30 31

 For /F "Tokens=%T_MONTH% Delims= " %%i In ("%$MD%") Do Set /A T_DOFM=%%i
GoTo :EOF

Отправлено: 05:52, 11-02-2010 | #9


Новый участник


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

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


Amel27 отличный код спасибо все рботает!
Теперь мне надо сравнить дату сегодняшнюю с тем что высчитало...
Если ставить так то не работает!
Код: Выделить весь код
IF %date:~6,4%%date:~3,2%%date:~0,2% LSS  %T_DAY:~-2%%T_MONTH:~-2%%T_YEAR% GOTO abc
пробовал по анологии
Код: Выделить весь код
IF %date:~6,4%%date:~3,2%%date:~0,2% GEQ 20100212 GOTO abc
тоесть втсавил так сначала год, месяц а потом и день! все без точек
Код: Выделить весь код
%date:~6,4%%date:~3,2%%date:~0,2% LSS %T_YEAR%%T_MONTH:~-2%%T_DAY:~-2% GOTO abc
тоже не работает!

И если получится то останется последняя проблема! Чтобы батник сам проверял каждый день сколько осталось дней до того числа которое он высчитывает... Ведь если он будет в автозапуске то он каждый раз при загрузке будет высчитывать новое число! верно же??....
Получается надо сделать так чтобы он как бы 1 раз высчитал число на 31 день больше, и потом уже при запуске только сверялся с ним а не перерасчитывал все это

Отправлено: 13:32, 11-02-2010 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Как сравнить %DATE% с установленной в ручную датой??

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
MySQL - Как сравнить числа приблизительно xstaford Программирование и базы данных 4 27-11-2008 09:58
Как сравнить версии драйверов - установленных и имеющихся в запасе? truvo Хочу все знать 2 11-07-2008 16:21
как сравнить два звуковых файла alexra Видео и аудио: обработка и кодирование 8 31-07-2007 00:42
Как и чем сравнить шумодавы в реальном времени. Igor_I Видео и аудио: обработка и кодирование 5 28-12-2006 10:56
Как протестировать и сравнить 2 модема? grifius Хочу все знать 1 06-12-2004 12:37




 
Переход