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

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

Ответить
Настройки темы
CMD/BAT - Расчет Средне-арифметического процента потери связи в BAT

Пользователь


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

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


Доброго дня уважаемые гуру...
Помогите пож-ста.

Пытаюсь сделать небольшую систему, которая бы грубо говоря пингами проверяла бы наличие связи. Состоит она вся из батников.
В кратце - пингует, если пинги не прошли пишет логи и отсылает на мыло - это я сделал, отладил - все работает.
Вторая часть этой системы - статистический модуль который тоже пингует объект, создает папки, в них пишет ежедневные логи и на основе ежедневных
логов выводит в отдельном файле txt ежемесячный лог с подсчетом средне-арифметического процента потери связи за месяц.
Потом пишет этот ежемесячный отчет в htm файл и отправляет на мыло...
Так вот со второй частью у меня проблемы возникли.
Не правильно ведет подсчет ежемесячных потерь и пишет ошибку "Missing operator".

Вот весь код -

Код: Выделить весь код
@echo off
SetLocal EnableDelayedExpansion
:ping
cls
set /a day_sum=0
set /a day_count=0
set /a mes_sum=0
set /a mes_count=0
set /A count=count+1
Title Pinging number %count%
set "site=127.255.255.255"
set "mes=%date:~-7%"
1>nul 2>&1 MD "%systemdrive%\AN-80\%mes%\%date%"
set "Log=%systemdrive%\AN-80\%mes%\%date%\log.txt"
for /f "tokens=2 delims=()" %%a in ('ping -n 4 %site%') do echo.%date% %time:~,8% %%a>> %log%
for /f "tokens=3 delims=%% " %%a in (%systemdrive%\AN-80\%mes%\%date%\log.txt) do set /a day_sum=!day_sum!+%%a*100 & set /a day_count=!day_count!+1
set /a day_average=(%day_sum%)/(%day_count%)+10000
set /a day_average_int=!day_average:~0,-2!-100
echo.>> %systemdrive%\AN-80\%mes%\Monthly-report.txt
echo Средне-арифметический процент потери связи за %date% составил - %day_average_int%.%day_average:~-2%%%> %systemdrive%\AN-80\%mes%\%date%\Daily-report.txt
echo.> %systemdrive%\AN-80\%mes%\Monthly-report.txt
for /r %systemdrive%\AN-80\%mes% %%a in (Daily-report.txt) do if exist %%a type %%a>> %systemdrive%\AN-80\%mes%\Monthly-report.txt

for /f "tokens=9 delims=%% " %%a in (%systemdrive%\AN-80\%mes%\Monthly-report.txt) do set /a mes_sum=!mes_sum!+%%a*100 & set /a mes_count=!mes_count!+1
set /a mes_average=(%mes_sum%)/(%mes_count%)+10000
set /a mes_average_int=!mes_average:~0,-2!-100

echo.>> %systemdrive%\AN-80\%mes%\Monthly-report.txt
echo>> %systemdrive%\AN-80\%mes%\Monthly-report.txt -------------------------------------------------------------------------
echo Средне-арифметический процент потери связи за %mes% составляет - %mes_average_int%.%mes_average:~-2%%%>> %systemdrive%\AN-80\%mes%\Monthly-report.txt
goto :ping
for /f "tokens=9 delims=%% " %%a in (%systemdrive%\AN-80\%mes%\Monthly-report.txt) do set /a mes_sum=!mes_sum!+%%a*100 & set /a mes_count=!mes_count!+1
set /a mes_average=(%mes_sum%)/(%mes_count%)+10000
set /a mes_average_int=!mes_average:~0,-2!-100


Получается что он не считает правильно Monthly-report.txt из-за этой строки...

IP адрес специально выставил такой после нескольких проходов будет видно не правильные расчеты...
Средне-арифметический процент у меня вычисляется путем суммирования всех чисел, в данном случае - %, делённая на их количество.


Очень надеюсь на вашу помощь и буду очень признателен...

Отправлено: 07:24, 08-06-2010

 

Старожил


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

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


Первое, что бросается в глаза - нехватает включения расширений команд: SetLocal EnableExtensions

-------
Как сказало Дерево Дровосеку: "я - пень".


Отправлено: 12:32, 08-06-2010 | #2



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

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


Пользователь


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

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


Цитата NiOl:
Первое, что бросается в глаза - нехватает включения расширений команд: SetLocal EnableExtensions »
...есть в самом верху.

Код: Выделить весь код
@echo off
SetLocal EnableDelayedExpansion
:ping

Отправлено: 12:44, 08-06-2010 | #3


Googler


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

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


Цитата registeruser1:
Missing operator »
батники поддерживают арифметику только с целыми числами, тут сохранение (%%a):
Код: Выделить весь код
echo Средне-арифметический процент потери связи за %date% составил - %day_average_int%.%day_average:~-2%%%> %systemdrive%\AN-80\%mes%\%date%\Daily-report.txt
тут использование:
Код: Выделить весь код
set /a mes_sum=!mes_sum!+%%a*100

Отправлено: 12:07, 10-06-2010 | #4


Старожил


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

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


1. Позволю себе ткнуть пальцем:
EnableExtensions - включает режим, при котором у комманд появляются расширенные возможности, например можно будет пользоваться арифметикой.
EnableDelayedExpansion - включает очень полезный режим, при котором можно пользоваться переменными внутри циклов и блоков условий, а также использовать переменные как индексы при обработке других переменных (правда при всех плюсах этот режим может стать причиной нежелательных изменений данных и как следствие - появление глючков).

2. По самому тексту - не очень то понятна логика Ваших подстчетов. Уточните пожалуйста, не является ли он компиляцией двух отдельных - пинга и анализа статистики (блок анализа похож на отдельный, вызываемый раз в день)

3. Есть некритичные замечания по тексту:
- set "site=127.255.255.255" - лучше писать set site=127.255.255.255 и в некотрых необходимых случаях set site="127.255.255.255"
- эта конструкция 1>nul 2>&1 MD "%systemdrive%\AN-80\%mes%\%date%" мне непонятна. Просто перенаправление сообщений? Если "да", то почему так?
- На кой нужна точность в сотые доли от процента? Да и вообще, вместо оценки доступности за 1 раз (4 посыла пинга за раз) наверно хватило бы пинговать только 1 раз. В Вашем случае получается различие статистики - 100% потерь означает недоступность одного ресурса (возможно из-за отсутствия иНета, а может и нет - для этого надо проверять несколько ресурсов), а в случае меньшего процента потерь однозначно говорит, что иНет есть, а вот его "качество" или надедность пингуемого ресурса "не очень".
- Каждый пинг сопровождается рассчетом с пробегом по всему логу... понятно, чем это кончается для сервака и времени между очередными пингами к концу дня... Возможно вы так поступили, чтобы при смене дат в каталоге остался последний результат... при этом каждый раз удаляете месячный отчет а в конце пытаетесь подбить по нему итоги...

Думаю Вы стали жертвой постоянных "улучшений и дописываний кода" - это тупиковая ветвь. По хорошему, если для Вас это важно - предлагаю сесть и серьезно проработать техническое задание и формат данных, выложить все сюда с кусками уже отлаженного кода (типа отсылки мыла) и уже вместе пытаться сделать новый рабочий отчет "все в одном". Не скажу, что это будет быстро и легко, но меньше будет непоняток.

-------
Как сказало Дерево Дровосеку: "я - пень".


Отправлено: 13:25, 10-06-2010 | #5



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Стоимость - Расчет стоимости, отличия версий и лицензий ПО Microsoft masterkharu Лицензирование продуктов Microsoft 1 19-05-2010 08:45
Продажи центральных процессоров выросли на 23 процента в третьем квартале текущего го OSZone News Новости информационных технологий 0 11-11-2009 16:30
Windows 7 продается на 234 процента лучше, чем Vista OSZone News Новости и события Microsoft 0 06-11-2009 18:30
БП и ИБП - [решено] Расчет мощности ИБП alnimo Прочее железо 8 01-05-2009 15:33
Прочие БД - Расчет полей с датами и передачи строк в отчет. crem78 Программирование и базы данных 0 09-08-2008 07:34




 
Переход