![]() |
Расчет Средне-арифметического процента потери связи в BAT
Доброго дня уважаемые гуру...
Помогите пож-ста. Пытаюсь сделать небольшую систему, которая бы грубо говоря пингами проверяла бы наличие связи. Состоит она вся из батников. В кратце - пингует, если пинги не прошли пишет логи и отсылает на мыло - это я сделал, отладил - все работает. Вторая часть этой системы - статистический модуль который тоже пингует объект, создает папки, в них пишет ежедневные логи и на основе ежедневных логов выводит в отдельном файле txt ежемесячный лог с подсчетом средне-арифметического процента потери связи за месяц. Потом пишет этот ежемесячный отчет в htm файл и отправляет на мыло... Так вот со второй частью у меня проблемы возникли. Не правильно ведет подсчет ежемесячных потерь и пишет ошибку "Missing operator". Вот весь код - Код:
@echo off set /a mes_average=(%mes_sum%)/(%mes_count%)+10000 set /a mes_average_int=!mes_average:~0,-2!-100 Получается что он не считает правильно Monthly-report.txt из-за этой строки... IP адрес специально выставил такой после нескольких проходов будет видно не правильные расчеты... Средне-арифметический процент у меня вычисляется путем суммирования всех чисел, в данном случае - %, делённая на их количество. Очень надеюсь на вашу помощь и буду очень признателен... |
Первое, что бросается в глаза - нехватает включения расширений команд: SetLocal EnableExtensions
|
Цитата:
Код:
@echo off |
Цитата:
Код:
echo Средне-арифметический процент потери связи за %date% составил - %day_average_int%.%day_average:~-2%%%> %systemdrive%\AN-80\%mes%\%date%\Daily-report.txt Код:
set /a mes_sum=!mes_sum!+%%a*100 |
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% потерь означает недоступность одного ресурса (возможно из-за отсутствия иНета, а может и нет - для этого надо проверять несколько ресурсов), а в случае меньшего процента потерь однозначно говорит, что иНет есть, а вот его "качество" или надедность пингуемого ресурса "не очень". - Каждый пинг сопровождается рассчетом с пробегом по всему логу... понятно, чем это кончается для сервака и времени между очередными пингами к концу дня... Возможно вы так поступили, чтобы при смене дат в каталоге остался последний результат... при этом каждый раз удаляете месячный отчет а в конце пытаетесь подбить по нему итоги... Думаю Вы стали жертвой постоянных "улучшений и дописываний кода" - это тупиковая ветвь. По хорошему, если для Вас это важно - предлагаю сесть и серьезно проработать техническое задание и формат данных, выложить все сюда с кусками уже отлаженного кода (типа отсылки мыла) и уже вместе пытаться сделать новый рабочий отчет "все в одном". Не скажу, что это будет быстро и легко, но меньше будет непоняток. |
Время: 18:18. |
Время: 18:18.
© OSzone.net 2001-