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

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

Ответить
Настройки темы
CMD/BAT - Скрипт сравнения дат. Непонятный вывод на консоли.

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


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

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


Изображения
Тип файла: jpg wtf-0.jpg
(232.9 Kb, 3 просмотров)
Приветствую!
Есть вот такой скрипт
Код: Выделить весь код
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
Вроде бы отрабатывает, но меня смущает то, что(как видно на скрине) строка
Код: Выделить весь код
set /p dateofnod32=<C:\Users\FessAectan\Documents\dateofversion.txt
при выполнении превращается в
Код: Выделить весь код
set /p dateofnod32=0<C:\Users\FessAectan\Documents\dateofversion.txt
Подскажите как убрать этот 0

Отправлено: 15:55, 06-11-2013

 


Moderator


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

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


Цитата FessAectan:
Вроде бы отрабатывает
Тогда в чем проблема? :)

Цитата FessAectan:
как убрать этот 0
Ноль в данном случае - просто номер потока ввода, неявно заданный при указании символа < (не обращайте внимания, он же не попадает в значение переменной).
Это сообщение посчитали полезным следующие участники:

Отправлено: 16:43, 06-11-2013 | #2



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

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


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


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

Профиль | Отправить 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
UserParameter вот такой
Код: Выделить весь код
UserParameter=statenod32updates_v1, c:\zabbix_209\checknod32updates_v1.bat
Воркает вроде бы
Код: Выделить весь код
root@zabbix:~# zabbix_get -s 10.189.223.13 -p 10053  -k statenod32updates_v1
1
ps
как раз таки 0 мешал напрямую в Zabbix'е забрать цифру, говорил мол
Код: Выделить весь код
C:\zabbix_209>set /p dateofnod32= 0<c:\zabbix_209\dateofversion.txt 
Открытие дескриптора невозможно в процессе
перенаправления дескриптора 0.
и так далее, т.е. скрипт не так как нужно отрабатывал

Последний раз редактировалось FessAectan, 06-11-2013 в 16:57. Причина: дополнение


Отправлено: 16:55, 06-11-2013 | #3


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


Сообщения: 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



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] СКРИПТ - разделение данных и вывод их 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




 
Переход