Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Пинг в лог (http://forum.oszone.net/showthread.php?t=174692)

Serg2010 02-05-2010 20:22 1405331

Пинг в лог
 
Доброго времени суток!

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

Серия команд:

Ping (ip-адрес) -n 50
зафиксировать среднее время и процент потерь в лог

Ping (ip-адрес) -n 50 -l 1024
зафиксировать среднее время и процент потерь в лог


Наверное лучше чтобы лог не затирался каждый раз при запуске, а сохранялся с порядковым номеров: Лог1, лог2, лог3, а то запустит юзер батник когда уже связи нет и затрет лог с данными, будет он 100% потерь :-). Номер можно хранить скажем в текстовом файле, при запуске открывать для чтения текущего значения из него.

megaloman 03-05-2010 17:08 1405823

Вот в первом приближении решение. В подпрограмму PingInLog передаём ip, значения параметров n и l.
В лог-файле с именем дата-время.лог получаем строку с интересующими Вас сведениями.
Не уверен в универсальности в зависимости от ОС. У меня русская Win XP. Явно для английской версии надо другие сравнения. Что касается имени лог-файла, то, наверное, лучше его не создавать заново с разными именами (как я сделал в этом примере под Вашим давлением), а создавать заново каждый день и пополнять его в течение дня - я в лог-файле прописал имя пользователя и дату-время получения результата. Можно в одном файле тогда отследить хронику событий.
Код:

Echo Off

Call :PingInLog 156.156.204.1 5 1024

GoTo End

:PingInLog

Set U=%UserName%
Set U1='
Set U2='

For /F "usebackq tokens=1,2,3,4* delims=," %%i in (`ping %1 -n %2 -l %3`) Do (

  For /F "usebackq tokens=1,2,3*" %%a in ('%%i') Do (
      If "%%a %%b"=="Обмен пакетами" Set U=%U% %%a %%c %%d
  )

  For /F "usebackq" %%a in ('%%k') Do (
      If "%%a"=="потеряно" Set U1=%%k
    )

  For /F "usebackq" %%a in ('%%k') Do (
      If "%%a"=="Среднее" Set U2=%%k
    )

)

Set Log=%Date:~6,4%%Date:~3,2%%Date:~0,2%-%Time:~0,2%%Time:~3,2%%Time:~6,2%.log

Echo %U%%U1%из %2.%U2% %Date% %Time%>%Log%

:End

Чтобы выдать файл на рабочий стол, надо последнее Эхо изобразить в виде:
Echo %U%%из %2.% %Date% %Time%>"C:\Documents and Settings\All Users\Рабочий стол\%Log%"

Serg2010 03-05-2010 19:11 1405880

Совершенно верно, нужно дописывать в файл, зачем усложнять ... я чтот не подумал

приму Ваш вариант, так как я примерно обрисовал задачу, а лучшее решение за Вами :-).
Жду конечно варианта - всё гениальное просто

спасибо забыл сказать

megaloman 03-05-2010 20:43 1405928

Совершенно не представляю, почему строка, которая должна быть у меня в тексте
Echo %U%%из %2.% %Date% %Time%>%Log%

в ответе выглядело неверно
Echo %U%%из %2.% %Date% %Time%>%Log% - это неверно!!!!

Чтобы дописывать строки в ежедневный файл надо вместо последнего Set и Echo написать

Set Log=%Date:~6,4%%Date:~3,2%%Date:~0,2%.log
Echo %U%%из %2.% %Date% %Time%>>%Log%

megaloman 03-05-2010 20:58 1405937

Вложений: 1
Я не понимаю, в чем дело, но при передаче на сайт код искажается. Поэтому берите текст в прикреплённом файле.


Время: 14:08.

Время: 14:08.
© OSzone.net 2001-