Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Ping раз в минуту

Ответить
Настройки темы
CMD/BAT - [решено] Ping раз в минуту

Новый участник


Сообщения: 16
Благодарности: 0

Профиль | Отправить PM | Цитировать


помогите в написании batch файла для одинарного запроса pingа раз в минуту в течении 9 часов

Отправлено: 23:57, 15-03-2010

 

Старожил


Сообщения: 415
Благодарности: 257

Профиль | Отправить PM | Цитировать


Держи. Как ты и просил, раз в минуту пингует одиночным запросом удаленный компьютер. Для работы нужна консольная версия утилиты NirCmd (nc.exe) В начале устанавливаешь переменные - подставь нужные тебе числа. От себя добавил счетчик пингов и количество оставшегося до завершения времени. Если не секрет, для чего тебе такой скрипт?

Код: Выделить весь код
@echo off
rem Установка общего времени работы (в минутах)
set time=540
rem Установка интервала срабатывания (в минутах)
set frequency=1
rem Установка IP
set ip=127.0.0.1

rem Перевод величин из минут в милисекунды и ввод поправки на продолжительность одиночного пинга
set /A time_ms=time*60000
set /A fq_ms=frequency*60000-2000

set /A remain=time_ms
:loop
rem Цикл пинга с убывающим счетчиком времени
set /A remain=remain-fq_ms
if %remain% LEQ 0 goto :EOF
set /A c_ping=c_ping+1
ping -n 1 %ip%>nul
set /A r_tmm=remain/60000+1
set /A r_tmh=r_tmm/60
cls
echo Пинг ^#%c_ping%. Осталось: %r_tmm% минут (%r_tmh% часов)
nc wait %fq_ms%
goto loop
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:26, 24-03-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для zonderz

Ветеран


Сообщения: 727
Благодарности: 150

Профиль | Отправить PM | Цитировать


krumane

сравните:
примерный код в делфи:


Код: Выделить весь код
... 
var i: integer;
Timer1.Interval:= 60;
i:=0;
procedure Timer1.Timer;
begin
  if i = 60*9 then Terminate;
  inc(i);
  WinExec(Pchar(ping 127.0.0.1), SW_SHOW);
end;
В autoIt тоже легко

Отправлено: 00:27, 25-03-2010 | #3


Ветеран


Сообщения: 3806
Благодарности: 824

Профиль | Отправить PM | Цитировать


слов нет, одни эмоции:
ping -n 360 -w 60000 узел
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:21, 25-03-2010 | #4


Новый участник


Сообщения: 1
Благодарности: 0

Профиль | Отправить PM | Цитировать


2Busla
Цитата:
слов нет, одни эмоции:
ping -n 360 -w 60000 узел
вот вот...
читайте хелп внимательнее товарисч Busla

Отправлено: 17:33, 25-03-2010 | #5


Старожил


Сообщения: 426
Благодарности: 108

Профиль | Отправить PM | Цитировать


В декабре я кому-то писал похожий скриптик. Смысл такой, что узел пингуется время-от времени (по-дефолту каждые 10 сек), работает на бэкграунде и кидает в лог время, когда узел был недоступен. Есть несколько ключей для запуска и краткий хелп по ним. Дефолтные значения также легко редактируются.
Из минусов - несколько одновременных запусков могут привести к вываливанию с ошибкой.
Код: Выделить весь код
@Echo off
SetLocal EnableExtensions
rem SetLocal EnableDelayedExpansion

rem Флаг подпроцесса. Устанавливается в режиме Multi. Запуск батника с параметром "." запрещен!
if "%1"=="." Goto Once

set Name=%~dpn0
set Ext=%~x0

rem Значения "по-умолчанию"

set IP=ya.ru
set Wait=10
set LogFile=%Name%.txt

set Log=SingleLog
rem set Log=MultiLog

rem set Mode=Once
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
set LogFile=%Name%_%tm:~0,10%.txt
:SingleLog
ping -n 1 %IP% >nul
if errorlevel 1 echo %tm%: %IP%>>%LogFile%

if %Mode%==Once exit

ping -n %Wait% 127.0.0.1 >nul
Goto Once

:Multi
start /b /low %Name%%Ext% .

-------
Как сказало Дерево Дровосеку: "я - пень".

Это сообщение посчитали полезным следующие участники:

Отправлено: 17:07, 30-03-2010 | #6


Пользователь


Сообщения: 65
Благодарности: 4

Профиль | Отправить PM | Цитировать


Народ, помогите - есть вот такой примерно, код батника. Т.е. мы пингуем диапазон IP-адрессов (нужно пинговать в цикле)
при достижении определенного числа не пингуемого узла/узлов, записывать его IP в
лог и преустанавливать соединение.
У меня почему-то не отрабатывает If ErrorLevel 1 - т.е.
отрабатывает только по последнему IP-адрессу (если последний IP не пингуется, то нормально, а если предпоследний не пингуется а
последний пигуется, то он пропускается ). Наверное причина в параметре %1.
А If ErrorLevel 0 (set /a cWork=%cWork%+1 && goto :EOF) счётчик меняет, но не
возвращается обратно в цикл Call
Что я тут делаю не так?

Код: Выделить весь код
@Echo Off
:PING
Set /a cWork=0
Set /a err=0
For /l %%a In (70,1,76) Do Call :CompWork 10.1.5.%%a
If %err%==30 goto END
If %cWork%==50 goto PING
GoTo :EOF 
:CompWork 
Echo Ping %1
Ping -n 2 %1 >Nul
If ErrorLevel 0 (set /a cWork=%cWork%+1 && goto :EOF)
If ErrorLevel 1 (set /a err=%err%+1 && goto :EOF)
:END
rasdial people /disconnect
rasdial people admin admin
goto PING

Последний раз редактировалось Smith_Wesson, 28-04-2011 в 13:50. Причина: задвоение


Отправлено: 13:32, 28-04-2011 | #7


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Цитата Smith_Wesson:
If ErrorLevel 0 (set /a cWork=%cWork%+1 && goto :EOF) счётчик меняет, но не
возвращается обратно в цикл Call »
может так?
Код: Выделить весь код
If %ErrorLevel%==0 set /a cWork=%cWork%+1 & goto :EOF
If %ErrorLevel%==1 set /a err=%err%+1 & goto :EOF

Отправлено: 18:20, 28-04-2011 | #8


Пользователь


Сообщения: 65
Благодарности: 4

Профиль | Отправить PM | Цитировать


нет. Не помогает... Я вообще не понимаю, как может отработать goto :EOF если самой метки :EOF в батнике нет!
P.S. батник не мой (нашел в Инете и решил приспособить под свои нужды) - но, не работает...

Отправлено: 18:43, 28-04-2011 | #9


Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Цитата Smith_Wesson:
не понимаю, как может отработать goto :EOF если самой метки :EOF в батнике нет! »
"GoTo:EOF" - аналог команды "Exit /B", т.е. он выполняет либо выход из процедуры (после CALL, как это сделано в процедуре :CompWork), либо выход из батника - строка перед меткой :CompWork. Т.е. этот цикл по факту одноразовый - если счетчики err/cWork не наберут заданной величины, производится выход из скрипта, так как 6 адресов явно недостаточно для набора числа 30/50.

P.S. в исходном скрипте была ошибка в строке:
Код: Выделить весь код
If ErrorLevel 0 (set /a cWork=%cWork%+1 && goto :EOF)
условие выполняется ВСЕГДА, из справки к IF:
Код: Выделить весь код
  ERRORLEVEL число  Условие является истинным, если код возврата последней
                    выполненной программы не меньше указанного числа.

Отправлено: 07:04, 29-04-2011 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » CMD/BAT - [решено] Ping раз в минуту

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Происходит автоматический выход из системы каждую минуту 06072009 Microsoft Windows Vista 2 01-04-2011 15:48
Разное - Принетер печатает раз через раз. Solker Microsoft Windows 2000/XP 2 23-04-2009 10:02
Flash - Corasair Survivor 8gb. Отваливается через минуту. advin Накопители (SSD, HDD, USB Flash) 5 29-03-2009 14:34
Wireless - Ровно каждую минуту пинг вырастает до 1к-2к DominatorBlazer Сетевое оборудование 0 10-02-2009 19:38
Интернет - [решено] После соединении с инетом комп на минуту подвисает fugi1 Microsoft Windows 2000/XP 3 04-10-2008 09:41




 
Переход