Показать полную графическую версию : Обычный пинг, но нужно что бы все что там он пишет в окне дублировалось в лог-файл
registeruser1
23-12-2009, 07:45
Доброго всем дня.
Помогите мне доделать Bat-ник не большой.
Это обычный пинг, но нужно что бы все что там он пишет в окне дублировалось в лог-файл txt.
Найти то я это нашел как делать, но проблема у меня немного шире. Та команда просто переписывает в файле все заново...
А мне нужно что бы это все это копилось там в файле...
Вот мой вариант -
@Echo Off
echo --------------------------------------------------------
ping -n 5 127.0.0.1
echo --------------------------------------------------------
echo Complette time pinging %time%
@Echo Off
echo.
echo.
echo.
Echo Pause 60 seconds. Please Wait...
echo.
ping -n 60 127.0.0.1 > nul
"%~f0"
IP соответственно другой...
Если можно как-нибудь заставить его вести обратный отсчет времени, будет просто супер...!
Заранее благодарю....
1. Символ ">" создает файл заново, а ">>" добавляет к уже имеющемуся (если файла нет, то создает его).
2. На счет обратного отсчета времени и задания вообще - непонятно - может выложишь сюда проблему - народ что-нибудь предложет.
vitaliyboch
23-12-2009, 14:37
Я обратный отсчет вот так делаю:
bat-файл, в консоли которого и происходит все действо:
CSCRIPT "%~DP0\Reboot.vbs"
Shutdown.exe -r -t 00 -c "Administrative reboot."
vbs-файл, который вызывается из bat-файла, он, собственно и реализует обратный отсчет на 120 секунд с показом сообщения в консоли каждые 5 секунд:
For i=120 To 0 Step -5
WScript.echo "The system will be rebooted in " & i & " seconds"
WScript.Sleep(5000)
Next
оба скрипта и файл Shutdown.exe должны лежать в одном каталоге
registeruser1
23-12-2009, 15:06
...Ок. Спасибо, работает.
Теперь такая проблема. Это у меня логи пингов. Как вы видите батник создает лог с текущей датой.
Это для того что бы потом можно было проанализировать по этим логам время когда отсутствовала связь.
Просто часто пропадает связь. Нужно выяснить переодичность.
Но, теперь батник все пинги добавляет как надо, дописывает в конец. И податам должен разбивать (еще не проверял, сегодня ночью только сделал).
Но вот проблема - как туда в данный лог загнать дату и время каждго пинга.
Вот что сейчас получилось -
--------------------------------------------------------------------
Pinging 127.0.0.1 with 32 bytes of data:
Reply from 127.0.0.1: bytes=32 time=1ms TTL=63
Reply from 127.0.0.1: bytes=32 time=1ms TTL=63
Reply from 127.0.0.1: bytes=32 time=1ms TTL=63
Reply from 127.0.0.1: bytes=32 time=1ms TTL=63
Reply from 127.0.0.1: bytes=32 time=1ms TTL=63
Ping statistics for 127.0.0.1:
Packets: Sent = 5, Received = 5, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 1ms, Maximum = 1ms, Average = 1ms
Pinging 127.0.0.1 with 32 bytes of data:
Reply from 127.0.0.1: bytes=32 time=1ms TTL=63
Reply from 127.0.0.1: bytes=32 time=1ms TTL=63
Reply from 127.0.0.1: bytes=32 time=1ms TTL=63
Reply from 127.0.0.1: bytes=32 time=1ms TTL=63
Reply from 127.0.0.1: bytes=32 time=1ms TTL=63
-------------------------------------------------------------------
А вот как хотелось бы -
--------------------------------------------------------------------
Date 23-12-2009 16;53;30
Pinging 127.0.0.1 with 32 bytes of data:
Reply from 127.0.0.1: bytes=32 time=1ms TTL=63
Reply from 127.0.0.1: bytes=32 time=1ms TTL=63
Reply from 127.0.0.1: bytes=32 time=1ms TTL=63
Reply from 127.0.0.1: bytes=32 time=1ms TTL=63
Reply from 127.0.0.1: bytes=32 time=1ms TTL=63
Ping statistics for 127.0.0.1:
Packets: Sent = 5, Received = 5, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 1ms, Maximum = 1ms, Average = 1ms
Date 23-12-2009 16;54;30
Pinging 127.0.0.1 with 32 bytes of data:
Reply from 127.0.0.1: bytes=32 time=1ms TTL=63
Reply from 127.0.0.1: bytes=32 time=1ms TTL=63
Reply from 127.0.0.1: bytes=32 time=1ms TTL=63
Reply from 127.0.0.1: bytes=32 time=1ms TTL=63
Reply from 127.0.0.1: bytes=32 time=1ms TTL=63
-------------------------------------------------------------------
Суть в том что бы можно было отследить когда не было связи и переодичность
обрывов. А в таком варианте все пинги без дат и времени и ни как не отследишь
когда был обрыв.
В принципе в самом батнике и дату и время я прописал.
В самом окне это отображается, но в логи не пишется.
Вот в чем проблема по сути.
Очень прошу помочь, заранее благодарю.
registeruser1
23-12-2009, 16:15
Вот полный вариант батника -
@Echo Off
echo.
echo --------------------------------------------------------------------------
echo TEL. NUMBER 7777 [MAC ADRESS 00-0E-EF-A9-CF-96]
echo Date %date:~0,2%-%date:~3,2%-%date:~6,4% %time%
echo --------------------------------------------------------------------------
ping -n 5 127.0.0.1
ping -n 5 127.0.0.1>> %DATE%.txt
echo --------------------------------------------------------------------------
echo Complette time pinging %time%
@Echo Off
echo.
echo.
Echo Pause 60 seconds. Please Wait...
echo.
ping -n 60 127.0.0.1 > nul
"%~f0"
МНЕ НУЖНО ЧТО БЫ РЕЗУЛЬТАТ ЭТОЙ СТРОКИ -
echo Date %date:~0,2%-%date:~3,2%-%date:~6,4% %time% (это дата и время).
ТОЖЕ ПИСАЛСЯ В ЛОГ ФАЙЛ.
Спасибо.
Как я понял ТЗ:
1. Батник запускается либо ручками либо по заданию - т.е. все время на компе не висит (это хорошо, т.к. CMD как и любой интерпретатор дико жрет ресурсы - CPU time) и надо просто собирать лог когда пинги не проходили (удачные пинги нас мало интересуют). Логи разбиваются по датам (в примере сортировка жутко неудобная - поверь, я так когда-то по заданию бэкапил базы 1С а потом разбирался где и что). Но я бы держал все в одном файле.
2. Если такая бякость как отваливание интерфейса случается, то желательно держать батник всегда, но чтобы он "не светился" и постараться не слишком нагружать проц.
как вариант относительно универсальное решение, но пинг какого-то конкретного адреса мне не совсем понятен - либо это шлюз ISP либо пинг внешнего IP удаленного офиса, где как раз проблемы и бывают. Если пингуется что-то из своей сети для тестирования своей сети, то желательно пинговать сразу несколько адресов, например шлюз ISP, какой-нить "ya.ru", "cnn.com", "w3c.org" - если хоть кто-то откликнулся - значит иНет скорее есть, чем нет, а проблема не у Вас, а у пингуемого ресурса...
@Echo off
SetLocal EnableExtensions
rem Флаг подпроцесса. Устанавливается в режиме Multi. Запуск батника с параметром "." запрещен!
if "%1"=="." Goto Once
set Name=%~dpn0
set Ext=%~x0
rem Значения "по-умолчанию"
set IP=ya.ru
set Wait=120
set LogFile=%Name%.txt
set Log=SingleLog
rem set Log=MultiLog
set Mode=Once
rem set Mode=Multi
rem Чтение и обработка параметров. Порядок любой, возможны повторы.
:ParamChk
cls
rem Инфа для сообщения о неправильном параметре. Если все ОК, то инфа пропадет.
if "%1"=="" Goto %Mode%
Echo Error! Wrong Parameter!
Echo.
Echo Use: %Name% [/W nnn] [/IP addr] [/O] [/I] [/S] [/M]
Echo.
Echo /W - Wait for nnn Seconds between Tests
Echo /IP - Destination Address (IP or FQDN). * If Address FQDN (like ya.ru) - Test can fail on DNS
Echo /O or /I - Instance: Once or Infinite (use TaskManager to Break CMD service)
Echo /S or /M - LogFile Name: Single (ChkNet.txt) or Multi (Based on Date, Ex: ChkNet_2009-12-23.txt)
Goto P%1
:P/W
if not "%2"=="" set Wait=%2
shift & shift & goto ParamChk
:P/IP
if not "%2"=="" set IP=%2
shift & shift & goto ParamChk
:P/O
set Mode=Once
shift & goto ParamChk
:P/I
set Mode=Multi
shift & goto ParamChk
:P/S
set Log=SingleLog
shift & goto ParamChk
:P/M
set Log=MultiLog
shift & goto ParamChk
:Once
rem дата/время в виде yyyy-mm-dd_hh-mm-ss - очень удобно для имен файлов и логов
set tm=%time::=-%
set tm=%date:~6,4%-%date:~3,2%-%date:~0,2%_%tm:~0,-3%
goto %Log%
:MultiLog
rem Высчитываем новое имя файла Лога (если включен режим /M)
set LogFile=%Name%_%tm:~0,10%.txt
:SingleLog
rem Пингуем ресурс и если ошибка - записываем в лог текущие дату/время. * После команды Ping сразу должна идти команда IF
ping -n 1 %IP% >nul
if errorlevel 1 echo %tm%>>%LogFile%
if %Mode%==Once exit
rem Задержка перед следующим пингом. Адрес лучше не менять
ping -n %Wait% 127.0.0.1 >nul
Goto Once
:Multi
Запуск самого себя в виде процесса - т.е. как "программа" батник виден не будет.
start /b /low %Name%%Ext% .
registeruser1
24-12-2009, 04:06
...Спасибо большое. Очень полезная штука. Я даже и незнал что в батниках так много переменных.
Сильно этим не баловался... А теперь вот приперло...
Код конечно хороош, но мне не все тут нужно. Хотя некоторые вещи я взял отсюда. Благодарю...
Вот что мне нужно было в итоге -
@Echo Off
:begin
set /A count=count+1
echo --------------------------------------------------------
echo TESTING & MONITORING IP PHONE "COMPANY NAME"
echo TEL. NUMBER XXXX [MAC ADRESS 00-0E-EF-A9-CF-96]
echo Date %date:~0,2%-%date:~3,2%-%date:~6,4% Time%time%
echo --------------------------------------------------------
echo TESTING MONITORING IP PHONE "COMPANY NAME">> %DATE%.txt
echo Phone NUMBER XXX [MAC ADRESS 00-0E-EF-A9-CF-96]>> %DATE%.txt
echo Date %date:~0,2%-%date:~3,2%-%date:~6,4% Time%time%>> %DATE%.txt
ping -n 5 127.0.0.1
ping -n 4 127.0.0.1>> %DATE%.txt
if errorlevel 1 echo PING NO SUCCESSFULL ERROR-5300 %time%>> %DATE%.txt
echo.
echo --------------------------------------------------------
if errorlevel 0 echo ********************************************************>> %DATE%.txt
echo Pause: 30 seconds.>> %DATE%.txt
if errorlevel 0 echo ********************************************************>> %DATE%.txt
echo.
if errorlevel 1 echo PING NO SUCCESSFULL %time%
@Echo Off
Echo Pause 30 seconds. Please Wait...
ping -n 30 127.0.0.1 >nul
cls
echo.
echo Pinging number %count%
goto begin
...Потом нужно модифицировать этот код.
Потому как я не смог сюда прикрутить параметры записи в лог файл только тех записей которые не пингуются...
В данном варианте пишутся все записи пингов, а потом просто ctrl+F и набираю в строке поиска 5300 и он ищет
соответствующие записи с таким текстом. А это у меня что-то типа кода ошибки. Вот так я пока вышел из положения...
Потом еще предстоит пару бессонных ночей и все будет нормально думаю...
БЛАГОДАРЮ ВСЕХ КТО МНЕ ПОМОГ...
reginfonet@yandex.ru (это на всякий случай).
Удачи...
registeruser1
24-12-2009, 20:36
...Это опять я. Приветствую.
Проблема такая.
Такие батники (их будет порядка 10) будут запущены на отдельно выделенной для этого машине и
нужно что бы этот они сохраняли логи на другом сервере...
Где и как прописать путь сохранения логов?..!!!
Заранее благодарю...
1. Если нужно, что бы результат какой-либо команды выводился на экран, если все ОК или в файл, если произошла ошибка, то перед перенаправлением используют номер типа сообщения (не помню как правильно называется). Чаще всего используют код "2" - ошибка. Например, ping -n 1 127.0.0.1 2>>Error.txt - если ошибки не было - сообщение будет на экране, если пинг не прошел - то в файле Error.txt
2. Если у пользователя, от чьего имени запускаются батники, есть доступ к расшаренной на другом компе папки, то в один файл легко можно скидывать лог аж сразу с нескольких батников, т.к. проблема может возникнуть только если сообщение будет выводится одновременно. В качестве имени файла указывается полный путь: \\ServerName\ShareName\File. Если в пути встречаются пробелы и прочие нехорошие символы ;) то весть путь берется в двойные кавычки: "\\SRV01\Data\Any Logs\IP Phone.log"
Denis-reut
12-10-2010, 00:08
Коллеги, доброй ночи. По последнему комментарию
"1. Если нужно, что бы результат какой-либо команды выводился на экран, если все ОК или в файл, если произошла ошибка, то перед перенаправлением используют номер типа сообщения (не помню как правильно называется). Чаще всего используют код "2" - ошибка. Например, ping -n 1 127.0.0.1 2>>Error.txt - если ошибки не было - сообщение будет на экране, если пинг не прошел - то в файле Error.txt" - так не получается...
то есть, суть проблемы - после выполнения пинга, не важно, с выводом в лог (типа C:\windows\system32\ping 192.168.1.3 >>D:\Diagnostic\%date%.txt) или нет, я не хотел бы разбираться, что вывалилось в лог, а следом создать маленькую логичечкую команду, которая бы проверяла, что если пинг был, то записать "ок" (типа if errorlevel 0 echo OK >>D:\Diagnostic\%date%.txt), а если нет, то записать в лог "alarm".
Не пойму, где засада!
Заранее благодарю!
если пинг был, то записать "ок" (типа if errorlevel 0 echo OK >>D:\Diagnostic\%date%.txt), а если нет, то записать в лог "alarm". »
(ping -n 1 192.168.1.1 && echo ok || echo alarm
)>>"D:\Diagnostic\%date%.txt"
Denis-reut
12-10-2010, 10:08
Доброе утро.
Решение хорошее - (ping -n 1 192.168.1.1 && echo ok || echo alarm
)>>"D:\Diagnostic\%date%.txt"
но в таком случае все выполнение команды ping валится в лог (насколько я понял, из-за наличия круглых скобок).
У меня получилось, как мне кажется, более интересно, так как смог разобраться с кодами возврата и в лог теперь складываются только результаты:
C:\windows\system32\ping 192.168.1.1 -n 3
if not errorlevel 1 echo OK >>"D:\Diagnostic\%date%.txt"
if errorlevel 1 echo ALARM >>"D:\Diagnostic\%date%.txt"
Уверен, что можно было две последних строки реализовать одной с помощью команды ELSE, но почему-то у меня не получилось и я пока остановился на достигнутом... но в любом случае спасибо!
саму проверку можно сделать так: (if errorlevel 1 (echo ALARM) else (echo OK)) >>"D:\Diagnostic\%date%.txt"
А еще ErrorLevel можно использовать как переменную: set Err=%ErrorLevel% а дальше работать с ней как угодно.
Еще, если варианты кода ошибки ограничены по кол-ву и заранее известны, то можно обработать так:
GoTo :Err%ErrorLevel%
:Err0
:Err2
все выполнение команды ping валится в лог »
как заказывали ;),
результаты пинга можно подавить:
@(ping -n 1 192.168.1.1 >nul 2>&1&& echo ok || echo alarm
)>>"D:\Diagnostic\%date%.txt"
Denis-reut
13-10-2010, 09:40
NiOl , amel27 , оба Ваши идеи хороши, спасибо за предложение!
Но теперь у меня есть еще один вопрос.
Для обобщения полученных диагностических данных и получения картины, скажем, за месяц было бы здорово всю информацию из лога (с расширением txt) закидывать в предварительно подготовленный документ excel в нужные ячейки, то есть там сделать таблицу: горизонтально - даты, вертикально - IP-адреса. И затем результаты размещать в нужных ячейках. Тогда была бы вообще красота - открываешь экселёвый документ и сразу видишь, как машинки работали за период времени, где и когда были траблы и т. д.
Что скажете?
Что скажете? »скажем, свести батником все текстовики в один CSV, который уже открывать EXCEL, но если ПК по строкам, логичней сохранять по машинкам типа "%ComputerName%.txt", а там поля "дата:результат"
Denis-reut
14-10-2010, 15:06
У меня вот какая мысль появилась - сразу делать в виде диагностики не *.txt, а xls-файл, и плюс создать обощенную таблицу (тоже в екселе) с именами компов и днями. В нем создать гиперссылки на значения в ежедневных файликах (они будут называться по дате), в которых структура меняться не будет. Таким образом, в сводной таблице будет отображена общая картина по компам и дням сразу.
Denis-reut, это уже скорее в VBS/VBA, рядом тема: Тестирование сетки (http://forum.oszone.net/thread-188151.html)
Непонятно только, если нужен запутанный отчет, то почему сразу XLS... по мне - так приятнее в виде HTML (ИМХО).
Denis-reut
16-10-2010, 11:30
NiOl, по поводу html можно поподробнее? Есть какие-то реализации на данную тему?
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.