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

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

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


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

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


Переделал скрипт, для того чтобы точно определять количество дней(разницу между последним обновлением и текущей датой)
Код: Выделить весь код
@ECHO OFF 
SetLocal EnableDelayedExpansion 
set "YEARBEGIN=1970" 
set "YEAR=%date:~6,4%" 
set /a "DAY=1%date:~,2%-100" 
set /a "MONTH=1%date:~3,2%-100" 

set /a "HOUR=1%time:~,2%-100" 
set /a "MIN=1%time:~3,2%-100" 
set /a "SEC=1%time:~6,2%-100" 
set /a "TOTALSEC=0" 



For /F "Tokens=2*" %%a In ('Reg Query "HKEY_LOCAL_MACHINE\SOFTWARE\ESET\ESET Security\CurrentVersion\Info"^
|Find /I "ScannerVersion"') Do Set DPath=%%b
echo %DPath% | gawk.exe "{print $2}"| tr.exe -d "()" > c:\zabbix_209\dateofversion.txt 
For /F "usebackq" %%a In (`cat.exe c:\zabbix_209\dateofversion.txt`) do set dateofnod32=%%a

set /a "YEARNOD=%dateofnod32:~0,4%"
set /a "DAYNOD=1%dateofnod32:~6,2%-100"
set /a "MONTHNOD=1%dateofnod32:~4,2%-100"
set HOURNOD=11
set MINNOD=15
set SECNOD=15

rem Инициализация таблиц длин месяцев 
rem        1  2  3  4  5  6  7  8  9  10 11 12 
set "regul=31 28 31 30 31 30 31 31 30 31 30 31" 
set "visok=31 29 31 30 31 30 31 31 30 31 30 31" 
 
call:date2timestamp %YEAR% %MONTH% %DAY% %HOUR% %MIN% %SEC% 
set val1=%TOTALSEC%
call:date2timestamp %YEARNOD% %MONTHNOD% %DAYNOD% %HOURNOD% %MINNOD% %SECNOD%
set val2=%TOTALSEC%
set /a "resultat=(%val1%-%val2%)/86400"
echo %resultat%

rem call :timestamp2date %TOTALSEC% 
rem echo %DAY%.%MONTH%.%YEAR% %HOUR%:%MIN%:%SEC% 
rem exit 
exit /b
 
rem перевести секунды в дату 
rem %1 - timestap время в секундах с 01.01.%YEARBEGIN% 
rem Возврат в переменных YEAR, MONTH, DAY, HOUR, MIN, SEC 
:timestamp2date 
set "TT=%1" 
set /a "SEC=TT%%60" 
set /a "TT=(TT-SEC)/60" 
set /a "MIN=TT%%60" 
set /a "TT=(TT-MIN)/60" 
set /a "HOUR=TT%%24" 
set /a "TT=(TT-HOUR)/24" 
set /a "YEAR=TT/365" 
set /a "TT-=YEAR*365" 
set /a "YEAR=YEAR+YEARBEGIN" 
for /l %%i in (%YEARBEGIN%,1,%YEAR%) do ( 
    call:isleap %%i 
    set /a "TT-=LEAP" 
) 
set /a "TT+=LEAP" 
set "MONTH=1" 
if %LEAP% equ 1 (set "mdays=%visok%") else (set "mdays=%regul%") 
for %%i in (%mdays%) do ( 
    if %%i gtr !TT! goto:step3 
    set /a "TT-=%%i" 
    set /a "MONTH+=1" 
) 
:step3 
set /a "DAY=TT+1" 
set "TT=" 
exit /b 
 
rem перевести дату в секунды 
rem %1 - год (4 знака), %2 - месяц (1-12) %3 - день (1-31) %4 - часы (0-23) %5 - минуты (0-59) %6 - секунды (0-59) 
:date2timestamp 
rem yearsecs=31536000 HOURSSEC=3600 daysecs=86400 
set /a "TOTALSEC=(%1-YEARBEGIN)*31536000" 
for /l %%i in (%YEARBEGIN%;1;%1) do ( 
    call:isleap %%i 
    if !LEAP! equ 1 set /a "TOTALSEC+=86400" 
) 
call:isleap %1 
if %LEAP% equ 1 (call:month2sec "%visok%" %2) else (call:month2sec "%regul%" %2) 
set /a "TOTALSEC+=(%3-1)*86400" 
set /a "TOTALSEC+=%4*3600" 
set /a "TOTALSEC+=%5*60+%6" 
exit /b 
 
rem определяет високосность года 
rem Если год точно делится на 4, но не делится на 100 или если он точно делится на 400 
rem function isleap(year) 
rem возврат в переменной LEAP=1 - год высокосный, иначе - 0 
:isleap 
set "LEAP=0" 
set /a "L1=%1%%4" 
set /a "L2=%1%%100" 
set /a "L3=%1%%400" 
if %L1% equ 0 if %L2% neq 0 set "LEAP=1" 
if %L3% equ 0 set "LEAP=1" 
set L1= 
set L2= 
set L3= 
exit /b 
 
rem %1 - массив regul или visok, %2 - текущий месяц 
:month2sec 
set /a "COUNT=1" 
for %%i in (%~1) do ( 
    if !COUNT! LSS %2 set /a "TOTALSEC+=%%i*86400" 
    set /a "COUNT+=1" 
) 
set COUNT= 
exit /b
за скрипт перевода в секунды спасибо товарищу res2001
http://forum.ru-board.com/topic.cgi?...&limit=1&m=1#1

Отправлено: 12:47, 11-11-2013 | #4