|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - Расчет Средне-арифметического процента потери связи в BAT |
|
CMD/BAT - Расчет Средне-арифметического процента потери связи в BAT
|
Пользователь Сообщения: 132 |
Профиль | Отправить 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 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
|
Профиль | Отправить PM | Цитировать Первое, что бросается в глаза - нехватает включения расширений команд: SetLocal EnableExtensions
|
------- Отправлено: 12:32, 08-06-2010 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Пользователь Сообщения: 132
|
Профиль | Отправить PM | Цитировать Цитата NiOl:
|
|
Отправлено: 12:44, 08-06-2010 | #3 |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать Цитата registeruser1:
echo Средне-арифметический процент потери связи за %date% составил - %day_average_int%.%day_average:~-2%%%> %systemdrive%\AN-80\%mes%\%date%\Daily-report.txt |
|
Отправлено: 12:07, 10-06-2010 | #4 |
Старожил Сообщения: 426
|
Профиль | Отправить 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 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Стоимость - Расчет стоимости, отличия версий и лицензий ПО 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 |
|