Ru-Board.club
← Вернуться в раздел «Microsoft Windows»

» Задачи на bat-файлах 8

Автор: Mark_Titov
Дата сообщения: 08.06.2010 17:16
wolf0425

Цитата:
можно не набор Daily-report.txt окучивать, а генерить статистику просто на основе всех суточных log.txt, вообще не создавая Daily-report

Вообщем-то и так можно...

Цитата:
выше вопрос про 50% потерь за два дня видишь?

...нет, где потери?
Автор: wolf0425
Дата сообщения: 08.06.2010 17:23

Цитата:
...нет, где потери?

Код: если вчера пинганули 10 раз и было 100% потерь, а сегодня пинганули 100 раз и было 0% потерь, то средние потери за месяц вовсе не должны быть 50%, как получается по результатам этой программы.
Автор: Mark_Titov
Дата сообщения: 08.06.2010 17:39

Цитата:
держи переделанную версию

...тоже не плохо, дневные считает, а итоговые за весь период?
К стати это что?
Средне-арифметический процент потери связи за %~nx1 составил = %day_average_int%.%day_average:~-2%%%

Добавлено:

Цитата:
если вчера пинганули 10 раз и было 100% потерь, а сегодня пинганули 100 раз и было 0% потерь, то средние потери за месяц вовсе не должны быть 50%, как получается по результатам этой программы.

...ну погонять нужно - там посмотрим что покажет.
Автор: king_stiven
Дата сообщения: 08.06.2010 17:45

Цитата:
если вчера пинганули 10 раз и было 100% потерь, а сегодня пинганули 100 раз и было 0% потерь, то средние потери за месяц вовсе не должны быть 50%

Интересно, а какой по твоему должен быть процент?
Автор: wolf0425
Дата сообщения: 08.06.2010 17:54

Цитата:
...тоже не плохо, дневные считает, а итоговые за весь период?
ну да, сразуу пишет построчно Monthly-report.txt со всеми дневными и в конце итоговой месячной статистикой.


Цитата:
К стати это что?
Средне-арифметический процент потери связи за %~nx1 составил = %day_average_int%.%day_average:~-2%%%
а что, в логе не видно? дата, точнее имя того дневного каталога, для которого эта строка.

king_stiven

Цитата:
Интересно, а какой по твоему должен быть процент?
вообще-то когда за "месяц" пинганули 110 раз и потеряли 10 пакетов - это обычно считается 9% потерь, а не 50% )



Автор: Mark_Titov
Дата сообщения: 08.06.2010 17:57
wolf0425
Слушай, я уже несколько дней голову ломаю как можно сделать.
Этот отчет потом у меня копируется в htm файл и должен отправляться на мыло в ПОСЛЕДНИЙ ДЕНЬ КАЖДОГО МЕСЯЦА.
Почему последний? Потому что количество дней в месяцах не одинаково. Так вот, весь месяц этот батник проверяет связь, генерирует отчеты и
в ПОСЛЕДНИЙ ДЕНЬ КАЖДОГО МЕСЯЦА отсылает - как сделать ума не приложу? Теперь все готово, кроме этой заключительной части кода...
Нужно теми же средствами все реализовать и все 3 части в один код соединить...

Добавлено:
P.s
Другими словами - нужно что бы код каким-то образом проверял дату (а может быть и время еще) для определения когда посылать данный отчет...
Автор: wolf0425
Дата сообщения: 08.06.2010 18:21

Цитата:
Слушай, я уже несколько дней голову ломаю как можно сделать.
Этот отчет потом у меня копируется в htm файл и должен отправляться на мыло в ПОСЛЕДНИЙ ДЕНЬ КАЖДОГО МЕСЯЦА.
Почему последний? Потому что количество дней в месяцах не одинаково. Так вот, весь месяц этот батник проверяет связь, генерирует отчеты и
в ПОСЛЕДНИЙ ДЕНЬ КАЖДОГО МЕСЯЦА отсылает - как сделать ума не приложу? Теперь все готово, кроме этой заключительной части кода...
Нужно теми же средствами все реализовать и все 3 части в один код соединить...:confused:
так вот проблемы у тебя в голове - от того что ты неправильно задачу ставишь.
Отсылать то отчет надо не в последний день старого в месяца, а при первом прогоне цикла в начале нового месяца, когда только-только появились полные результаты за прошедший месяц.

т.е. прикручивается примерно так:
(отсылка в момент успешного создания нового месячного каталога)

Код: :ping
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 -w 10"
::set "site=127.0.0.1 -w 10"
set "mes=%date:~-7%"
2>nul MD "%systemdrive%\AN-80\%mes%\" && call :otchet
2>nul MD "%systemdrive%\AN-80\%mes%\%date%"
set "Log=%systemdrive%\AN-80\%mes%\%date%\log.txt"
Автор: BagaBaga
Дата сообщения: 08.06.2010 18:56
wolf0425, спасибо.

При массовой правке табулированных файлов столкнулся с такой задачей (усложненной по сравнению с уже решенной http://forum.ru-board.com/topic.cgi?forum=62&topic=19668&start=1680#7):
В заданном файле в фиксированную строку (пусть, №4 по порядку) заменить последовательность символов, начиная с 20-ой позиции, на другую. При этом эта "другая последовательность" лежит в другом файле - состоящем только из одной строки. Если срока-замещение длиннее, чем число символов от 20-ой позиции и до конца 4ой строки, то замена не происходит.

Собственно, возможно ли это (с помощью sed)?

PS
Вариант с 6ю символами сильно облегчил мне задачу, но, как выснилось, все немного сложнее
Автор: Mark_Titov
Дата сообщения: 08.06.2010 19:05

Цитата:
т.е. прикручивается примерно так:

...а в какой последовательности это все скрутить с этим кодом?

код
Автор: Sustaw
Дата сообщения: 08.06.2010 19:36
Обращаюсь снова, задача такова: на сервере после выполнения определенных задач создается лог файл. Его нужно отправить на определенный комп в такую то директорию, но этот определенный комп выключен. Как так сделать чтоб сервер опрашивал заданный комп с промежутком в час или полтора, и в случае положительного ответа отправлял заданный файл куда надо? Опять же примеру скрипта был бы рад.
Автор: wolf0425
Дата сообщения: 08.06.2010 19:38

Цитата:
..а в какой последовательности это все скрутить с этим кодом?
выданным тебе куском заменить начало, где все сеты и была похожая строка создания каталога - сразу суточного. и дописать в конец подпрограмму отправки отчета


Цитата:
но теперь нужно создать условие - если создалась новая папка месяца - то GOTO :MAIL.
ну есть же в куске:


Код: 2>nul MD "%systemdrive%\AN-80\%mes%\" && call :otchet
Автор: pav
Дата сообщения: 08.06.2010 19:54
prostomaster
Окно появляется как раз на время пока стартовал батник и до того как отработала скрывалка окна. Можно попробовать задать в свойствах ярлыка запуска указать "свёрнутое окно".
Автор: Mark_Titov
Дата сообщения: 08.06.2010 19:56
wolf0425
...вот я скрутил все вроде бы - но как указать :htm что бы он брал отчет с предыдущего месяца??

Код: type %systemdrive%\AN-80\%mes%\Monthly-report.txt >> C:\"AN-80 Log".htm
Автор: wolf0425
Дата сообщения: 08.06.2010 20:03
BagaBaga

Цитата:
Собственно, возможно ли это (с помощью sed)?

то что мне не приходит в голову как сделать с помощью самого sed - это твое согласование по длине.

так что пока так:


Код: setlocal enabledelayedexpansion
set /p string=<file2
set /a str_len=0
:strlenloop
if "!string:~%str_len%,1!" neq "" set /a str_len +=1 && goto :strlenloop
sed -r "4 {s/^(.{19}).{6,}/\1%string%/}" <file1 >file_out
Автор: wolf0425
Дата сообщения: 08.06.2010 20:20

Цитата:
...вот я скрутил все вроде бы
что-то странное и неизвестно из чего ты скручивал, разбираться в том что сам наваял - сам и будешь.


Цитата:
как указать :htm что бы он брал отчет с предыдущего месяца??


вот так сделать чтоб он брал отчет из последнего по дате создания месячного каталога

Код:
:htm
for /f "delims=" %%a in ('dir /b /ad /od /tc %systemdrive%\AN-80\') do set "mes_log=%%a"
1>>C:\"AN-80 Log".htm (
echo ^<body bgcolor="#336699"^>
echo ^<title^>System^</title^>
echo ^<img src="cid:Logo.bmp"^>
echo ^<div align="left"^>
echo ^<font color="#336699"^>
echo ^<hr size="4"^>
echo ^</div^>
echo ^<div align="left"^>
echo ^<font color="#ffffff"^>
echo ^<pre^>
type %systemdrive%\AN-80\%mes_log%\Monthly-report.txt
echo ^</pre^>
echo ^</H3^>
echo ^</div^>
echo ^<div align="left"^>
echo ^<font color="#336699"^>
echo ^<hr size="4"^>
echo ^</div^>
echo ^<div align="left"^>
echo ^<font face="arial"^>^<font color="#cccccc"^>^<H6^>^<small^>Статистический модуль системы мониторинга. Copyright 2010^<small^>^</font^>^</H6^>
echo ^</div^>
)
:mail
ЗДЕСЬ КОМАНДА ДЛЯ ОТПРАКИ НА МЫЛО...
Автор: WesternLight
Дата сообщения: 08.06.2010 20:46
Здравствуйте! Помогите решить проблему. Ниже фрагмент кода, предназначен для записи в лог разных сообщений в кодировке 1251, этот bat-файл "компилирован" в exe с помощью Quick Batch File Compiler:

FOR /F %%A IN ('cscript "%MyFiles%\date.vbs" //Nologo') DO SET "startdate=%%A"

::Содержание date.vbs: wscript.echo day(date) & "." & month(date) & "." & year(date)


date /t|"%MyFiles%\iconv.exe" -c -s -f 866 -t WINDOWS-1251>>Logs\consupdate.%startdate%.log
time /t|"%MyFiles%\iconv.exe" -c -s -f 866 -t WINDOWS-1251>>Logs\consupdate.%startdate%.log
echo ЗДЕСЬ КАКОЙ-НИБУДЬ ТЕКСТ|"%MyFiles%\iconv.exe" -c -s -f 866 -t WINDOWS-1251>>Logs\consupdate.%startdate%.log
echo.|"%MyFiles%\iconv.exe" -c -s -f 866 -t WINDOWS-1251>>Logs\consupdate.%startdate%.log

Приведенный выше код работает на нескольких машинах с XP и 2003 Server нормально, а на всех машинах с 2000 Server SP4 сообщает следующее: "Попытка записи в несуществующий канал". Уже не знаю что думать...

Думал, может дело в невозможности обратиться к iconv.exe, т.к. путь содержит переменную компилятора, но вот такая конструкция работает:

"%MyFiles%\iconv.exe" -c -s -f 866 -t UTF-8 "%TEMP%\config.tmp">"%TEMP%\config.txt"

т.е. переменная компилятора %MyFiles% в Windows 2000 обрабытывается корректно. Может кто-то сталкивался?
Автор: wolf0425
Дата сообщения: 08.06.2010 20:54
WesternLight а ради чего такое извращение то?
Автор: NIKZZZZ
Дата сообщения: 08.06.2010 21:17
WesternLight

Цитата:
date /t|"%MyFiles%\iconv.exe" -c -s -f 866 -t WINDOWS-1251>>Logs\consupdate.%startdate%.log

В данном случае цифры перед ">>" воспринимаются как номер канала ввода.вывода.
Лучше , например, так:

Код: >>Logs\consupdate.%startdate%.log date /t|"%MyFiles%\iconv.exe" -c -s -f 866 -t WINDOWS-1251
Автор: wolf0425
Дата сообщения: 08.06.2010 21:24

Цитата:
Лучше , например, так:
ты наверно хотел написать так:

Код: date /t| 1>>Logs\consupdate.%startdate%.log "%MyFiles%\iconv.exe" -c -s -f 866 -t WINDOWS-1251
Автор: Mark_Titov
Дата сообщения: 08.06.2010 21:39

Цитата:
вот так сделать чтоб он брал отчет из последнего по дате создания месячного каталога

wolf0425 Спасибо, но он не находит путь.

Код: set "mes_log=%%a"
Автор: NIKZZZZ
Дата сообщения: 08.06.2010 21:40
wolf0425

Цитата:
ты наверно хотел написать так

Да.
Автор: wolf0425
Дата сообщения: 08.06.2010 21:54

Цитата:
...не находит путь.
ну. а что находит - мне у гадалки узнавать?
чему равен %mes_log% на метке :mail
и что находится в %systemdrive%\AN-80\%mes_log%\

попробуй переделай так:

Код: :htm
for /f "delims=" %%a in ('dir /b /ad /od /tc %systemdrive%\AN-80\') do if exist %systemdrive%\AN-80\%%a\Monthly-report.txt set "mes_log=%systemdrive%\AN-80\%%a\Monthly-report.txt"
1>>C:\"AN-80 Log".htm (
echo ^<body bgcolor="#336699"^>
echo ^<title^>System^</title^>
echo ^<img src="cid:Logo.bmp"^>
echo ^<div align="left"^>
echo ^<font color="#336699"^>
echo ^<hr size="4"^>
echo ^</div^>
echo ^<div align="left"^>
echo ^<font color="#ffffff"^>
echo ^<pre^>
type %mes_log%
echo ^</pre^>
echo ^</H3^>
echo ^</div^>
echo ^<div align="left"^>
echo ^<font color="#336699"^>
echo ^<hr size="4"^>
echo ^</div^>
echo ^<div align="left"^>
echo ^<font face="arial"^>^<font color="#cccccc"^>^<H6^>^<small^>Статистический модуль системы мониторинга. Copyright 2010^<small^>^</font^>^</H6^>
echo ^</div^>
)
Автор: Mark_Titov
Дата сообщения: 08.06.2010 22:03
wolf0425
Супер! Точто нужно! Спасибо тебе дружище...
Автор: wolf0425
Дата сообщения: 08.06.2010 22:04

Цитата:
...прошу прощения - это я не дописал -
type %systemdrive%\AN-80\%mes_log%\Monthly-report.txt>> C:\"AN-80 Log".htm
ты в моем коде видишь >> C:\"AN-80 Log".htm у этой строки? или все же нет?
Автор: Mark_Titov
Дата сообщения: 08.06.2010 22:06

Цитата:
ты в моем коде видишь >> C:\"AN-80 Log".htm у этой строки? или все же нет?

...Все wolf0425, теперь с вышеуказанным кодом все работает! Снимаю шляпу!

Добавлено:
wolf0425, извини, подскажи как можно сделать так что бы ip который пингуется у меня в батнике брался из txt файла? Я буду в exe конвертить его и прикручивать как сервис, и что бы при изменении пингуемого объекта не переделывать его, в этом файле просто изменить ip и все...

Вот эта строка -

Код: set "site=127.255.255.255 -w 10"
Автор: wolf0425
Дата сообщения: 08.06.2010 23:47
Mark_Titov ну если ip это единственная строка в текстовом файле то так
set /p site=<file.txt
пример есть даже на этой странице, так что ты просто ленишься искать
Автор: Mark_Titov
Дата сообщения: 09.06.2010 05:43
wolf0425...Сенкс
Автор: barsikline
Дата сообщения: 09.06.2010 06:41
wolf0425

Цитата:
ну удобнее же когда этот просто путь - просто видно на скриншоте, чем гадать по кракозябрам.
и ls -l скомандуй серверу - хоть увидим что он сам про русские имена думает.



Цитата:
судя по принтскрину у тебя не срабатывает cd в первом вызове ftp
ты бы проверил, что туда зайти можно хотя бы вручную

Напрямую туда заходит, это я проверял. Тут проблема именно в 2-х пробелах в имени каталога "Инструкции и документация". Проверял если бы стояло просто "Инструкция документация", то все ок. Замута какая-то.

Автор: Mark_Titov
Дата сообщения: 09.06.2010 06:47
...Подскажите плиз как убрать вывод на экран ошибки при не обнаружении файла указанного в этом параметре -

Код: set /p site=<%systemdrive%\IP-AN-80.txt && goto :ping-ok
Автор: AkeHayc
Дата сообщения: 09.06.2010 09:32
Ребята подкскажите пожалуйста как добавить контакты в Active Directory.

Вот коды батника:

set contacts_list=c.csv
set OU=OU=adressbook,DC=COMPANY,DC=local
::
for /f "eol=# tokens=1-13 delims=;" %%a in (%contacts_list%) do (
dsadd contact CN=%%a,%ou%" -fn %%b" -ln "%%c" -display "%%d" -title "%%e" -tel "%%f" -mobile "%%g" -email "%%h" -office "%%i" -fax "%%j" -hometel "%%k")

При выполнении этого батника у меня например вместо почтового ящика ставиться номер телефона. Подскажите правильное решение.

Страницы: 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132

Предыдущая тема: XP не видит второй раздел на съемном USB-HDD


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.