Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.145.47.253] |
|
Сообщ.
#1
,
|
|
|
Здравствуйте, помогите,пожалуйста. Есть 1.bat в нем написана программа расчета даты (определение текущей даты, затем прибавление или вычитание заданное кол-во дней).Пример: сегодня 20.05.2017, мы запускаем файл
1.bat 6 результат будет 26.05.2016 если 1.bat -8 результат будет 12.05.2017 Нужно, написать 2.bat, который принимает 1 параметр - целое число (отрицательное или положительное). При запуске 2.bat, запускается предыдущий батник (1.bat), 2.bat передает ему целое число (отрицательное или положительное),программа выводит новую дату.ЗАТЕМ День создания файла больше чем тот день ( чем полученный день). 1.bat код ниже Помогите, пожалуйста! @echo off echo. if not "%OS%"=="Windows_NT" goto syntax set error=0 if "%1"=="" goto syntax if not "%3"=="" goto syntax for /f "tokens=4" %%a in ('echo. ^| date ^| find "дата*"') do set pDate=%%a if "%2"=="" ( set cDate=%pDate% set cDays=%1 ) else ( set cDate=%1 set cDays=%2 ) call :ReadDateFormat (echo.%cDate%) | findstr /R /B /C:"[0-9]*\%sDate%[0-9]*\%sDate%[0-9]*" >NUL if errorlevel 1 ( echo error: %cDate% - Неправильная дата echo. goto syntax ) (echo.%cDays%) | findstr /R /B /C:"-*[0-9]*" >NUL if errorlevel 1 ( echo error: %cDays% -Неправильное целое echo. goto syntax ) call :ParseDate %cDate% if %error% NEQ 0 goto syntax call :JDate %GYear% %GMonth% %GDay% echo Ќ*з*«м**п ¤*в*: %cDate% if "%cDays:~0,1%"==" " ( set /A NewJDate=%JDate% - %cDays:~1% echo Кол-во отнытых дней: %cDays:~1% ) else ( set /A NewJDate=%JDate% + %cDays% echo Кол-во прибавленных дней: %cDays% ) call :GDate %NewJDate% call:ReformatDate %GDate% echo Окончательная дата*: %LDate% goto:eof :ReadDateFormat start /W Regedit /E "%TEMP%.\_TEMP.REG" "HKEY_CURRENT_USER\control Panel\International" for /f "tokens=1* delims==" %%A in ('TYPE "%TEMP%.\_TEMP.REG"^|find /I "iDate"') do set iDate=%%B for /f "tokens=1* delims==" %%A in ('TYPE "%TEMP%.\_TEMP.REG"^|find /I "sDate"') do set sDate=%%B DEL "%TEMP%.\_TEMP.REG" set iDate=%iDate:"=% set sDate=%sDate:"=% goto:eof :gdate set /a p=%1 + 68569 set /a p1=p*4 set /a q=p1/146097 set /a q1=146097*q+3 set /a r=p-q1/4 set /a r1=r+1 set /a r2=4000*r1 set /a s=r2/1461001 set /a s1=1461*s set /a t=%r%-s1/4+31 set /a t1=80*t set /a u=t1/2447 set /a v=u/11 set /a v1=q-49 set /a v2=2447*u set /a gyear=100*v1+s+v set /a gmonth=u+2-12*v set /a gday=t-v2/80 for %%a in (p q q1 q2 r r1 r2 s s1 t t1 u v v1 v2) do set %%a= if 1%gmonth% LSS 20 set gmonth=0%gmonth% if 1%gday% LSS 20 set gday=0%gday% set gdate=%gyear% %gmonth% %gday% goto:eof :jdate SET MM=%2 SET DD=%3 IF %MM:~0,1% EQU 0 SET MM=%MM:~1% IF %DD:~0,1% EQU 0 SET DD=%DD:~1% set /a m1=%MM%-14 SET /A Month1=m1/12 SET /A Year1=%1+4800 set /a b1=%Year1%+%Month1% set /a b2=1461*b1 set /a b=b2/4 set /a c1=%MM%-2-12*%Month1% set /a c2=367*c1 set /a c=c2/12 set /a d1=%Year1%+%Month1%+100 set /a d2=d1/100 set /a d3=3*d2 set /a d=d3/4 set /a jdate=b+c-d+%DD%-32075 For %%A in (Month1 Year1 b b1 b2 c c1 c2 d d1 d2 d3) do set %%A= goto:eof :ParseDate IF %iDate%==0 For /f "tokens=1-3 delims=%sDate%" %%A in ('echo.%1') DO ( SET GYear=%%C SET GMonth=%%A SET GDay=%%B ) IF %iDate%==1 For /f "tokens=1-3 delims=%sDate%" %%A in ('echo.%1') DO ( SET GYear=%%C SET GMonth=%%B SET GDay=%%A ) IF %iDate%==2 For /f "tokens=1-3 delims=%sDate%" %%A in ('echo.%1') DO ( SET GYear=%%A SET GMonth=%%B SET GDay=%%C ) IF %GDay% GTR 31 set error=1 IF %GMonth% GTR 12 set error=1 goto:eof :ReadDateFormat start /W Regedit /E "%TEMP%.\_TEMP.REG" "HKEY_CURRENT_USER\Control Panel\International" for /f "tokens=1* delims==" %%A in ('type %TEMP%.\_TEMP_REG"^| find /I "iDate"') do set iDate=%%B for /f "tokens=1* delims==" %%A in ('type %TEMP%.\_TEMP_REG"^| find /I "sDate"') do set iDate=%%B DEL "%TEMP%.\_TEMP.REG" SET iDate=%iDate:"=% SET sDate=%sDate:"=% goto:eof :ReformatDate If %iDate%==0 set LDate=%2%sDate%%3%sDate%%1 If %iDate%==1 set LDate=%3%sDate%%2%sDate%%1 If %iDate%==2 set LDate=%1%sDate%%2%sDate%%3 goto:eof :syntax echo dateadd.bat - программа прибавления (вычитание) указанного количества дней echo k (от) Указанной даты. Если дата не указана, то берется текущая дата echo Пример запуска: echo dateadd 12.03.2009 42 echo. |