|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Скрипт сравнения дат. Непонятный вывод на консоли. |
|
CMD/BAT - Скрипт сравнения дат. Непонятный вывод на консоли.
|
Новый участник Сообщения: 3 |
Профиль | Отправить PM | Цитировать
Приветствую!
Есть вот такой скрипт setlocal enabledelayedexpansion set /p dateofnod32=<C:\Users\FessAectan\Documents\dateofversion.txt set day=%DATE:~0,2% set month=%DATE:~3,2% set year=%DATE:~6,4% set datenow=%year%%month%%day% set /a diff=%datenow%-%dateofnod32% echo %diff% pause Подскажите как убрать этот 0 |
|
Отправлено: 15:55, 06-11-2013 |
Сообщения: 53175
|
Профиль | Отправить PM | Цитировать Цитата FessAectan:
Цитата FessAectan:
|
||
Отправлено: 16:43, 06-11-2013 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 3
|
Профиль | Отправить PM | Цитировать Задача стояла такая:
Мониторить в Zabbix актуальность антивирусных баз NOD32. В первом варианте сделал таким образом, что скрипт в планировщике пишет в файл цифру-разницу между текущей датой и датой последнего обновления, Zabbix потом через UserParameter эту цифру забирает и обрабатывает. Все таки удалось(пусть и местами коряво) получить эту цифру сразу в Zabbix путем подстановки в UserParameter пути к bat файлу. Скрипт, в итоге, выглядит так @echo off cd /d c:\zabbix_209 setlocal enabledelayedexpansion CHCP 1251 > Nul 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 day=%DATE:~0,2% set month=%DATE:~3,2% set year=%DATE:~6,4% set datenow=%year%%month%%day% set /a diff=%datenow%-%dateofnod32% CHCP 866 > Nul echo %diff% exit /b Воркает вроде бы ps как раз таки 0 мешал напрямую в Zabbix'е забрать цифру, говорил мол и так далее, т.е. скрипт не так как нужно отрабатывал |
Последний раз редактировалось FessAectan, 06-11-2013 в 16:57. Причина: дополнение Отправлено: 16:55, 06-11-2013 | #3 |
Новый участник Сообщения: 3
|
Профиль | Отправить 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 http://forum.ru-board.com/topic.cgi?...&limit=1&m=1#1 |
Отправлено: 12:47, 11-11-2013 | #4 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
[решено] СКРИПТ - разделение данных и вывод их | iExpo | Вебмастеру | 1 | 01-07-2011 22:05 | |
Создание установочных пакетов, на основе сравнения до и после.... | sea707 | Автоматическая установка приложений | 0 | 13-07-2010 06:21 | |
Разница дат - скрипт | Кощей | Вебмастеру | 1 | 23-10-2009 04:01 | |
C/C++ - bat & cmd - сокрытие окна и вывод данных консоли в интерфейсе нашей программы | crashtuak | Программирование и базы данных | 5 | 07-05-2009 16:40 | |
Delphi - Вычитание дат на Delphi | d_voffka | Программирование и базы данных | 2 | 05-06-2006 11:53 |
|