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

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

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

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


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

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


Изменения
Автор: yanus74
Дата: 20-08-2012
мне нужен скриптик, который будт работать по вот этому алгоритму:


у1- проверка есть ли пинг до внешнего ресурса, например ya.ru
у2- проверка глобальной переменной, не знаю, наверно она должна быть в файле, если переменная N>=3 то
О2 - выполнить команду ( в моем случае netsh interface set interface name="inet" admin=DISABLED ,тут нужна будет пауза, чтобы обновился маршрут, секунд 5-10
О3 - запустить прогу sendmail
О1 - запустить прогу которая подключится через телнет к роутеру и ребутнет его )
О4- обнулить глобальную переменную N

N++ увеличить глобальную переменную на 1

А то глючный модем уже задолбал (

Зарание спс!

Отправлено: 12:26, 20-08-2012

 

Аватара для El Sanchez

Ветеран


Contributor


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

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


yanus74, не нужна тут глобальная переменная, я так понял, что вам нужно после 3 перезагрузок модема и неудачном пинге обновить маршрут и отправить письмо, что все плохо.
Код: Выделить весь код
@Echo Off
SetLocal
Set N=0

:loop
Ping ya.ru -n 2 1>nul&&Exit /B 0
If %N% GEQ 3 (
	Echo:netsh interface set interface name="inet" admin=DISABLED
	Echo:ping 127.0.0.1 -n 6 1>nul
	Echo:sendmail
) Else (
	Echo:Start /Wait "" "прога через телнет"
	Set /A N+=1
	GoTo :loop
)
Красные echo для отладки, удалите в конечном варианте

Отправлено: 15:26, 20-08-2012 | #2



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

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


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


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

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


спасибо
скрипт будет запускаться 1 раз в 30 минут, как он будет запоминать значение N ?

просто идея такая, что скрипт проверил, инета нету, перезагрузил, прошло пол часа, проверил, нету ......и на четвертый раз, когда N = 3 , он отключает этот интерфейс, и керио меняет маршрут на другой интерфейс, т.к. этот не доступен, а скрипт отправляет уведомление, что там опять какето фигня с модемом (

Отправлено: 16:58, 20-08-2012 | #3


Аватара для El Sanchez

Ветеран


Contributor


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

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


Цитата yanus74:
скрипт будет запускаться 1 раз в 30 минут, как он будет запоминать значение N ? »
yanus74, ясно, тогда так:
Код: Выделить весь код
@Echo Off
SetLocal
Set N=0
(0<count Set /P "N=") 2>nul
Ping ya.ru -n 2 1>nul&&Del /F /Q count 2>nul&&Exit /B 0
If %N% EQU 3 (
	Echo:netsh interface set interface name="inet" admin=DISABLED
	Echo:ping 127.0.0.1 -n 6 1>nul
	Echo:sendmail
) Else (
	Echo:Start /Wait "" "прога через телнет"
	Set /A N+=1
	Call Echo:%%N%%>count
)
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:24, 20-08-2012 | #4


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


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

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


на команду
Код: Выделить весь код
Echo:(0<count Set /P "N=") 2>nul
возвращает "Не удается найти указанный файл."

Последний раз редактировалось yanus74, 21-08-2012 в 09:19.


Отправлено: 07:49, 21-08-2012 | #5


Аватара для El Sanchez

Ветеран


Contributor


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

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


Цитата yanus74:
возвращает "Не удается найти указанный файл." »
yanus74, а вы зачем Echo: к строке (0<count Set /P "N=") 2>nul добавили? Уберите.

Отправлено: 14:47, 21-08-2012 | #6


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


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

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


Цитата El Sanchez:
yanus74, а вы зачем Echo: к строке (0<count Set /P "N=") 2>nul добавили? Уберите. »
я его добавил для отладки, сюда добавил запуск notepad.exe

Код: Выделить весь код
Echo:Start /Wait "" "notepad.exe"
выключил на модеме инет ( пинг возвращает заданный узел не доступен)
запустил скрипт, и ничего не произошло, ни какого вывода не было, добавил везде эхо) и получил результат выше
правда я немного модифицировал скрипт, добавил в начале
Код: Выделить весь код
@Echo Off
d:
d:\bat
могло ли это повлиять на выполнение скрипта?

вот лог выполнения скрипта:
Код: Выделить весь код
D:\programs\bat>D:\programs\bat\1.bat

D:\programs\bat>D:\programs\bat\1.bat

D:\programs\bat>D:\programs\bat\1.bat

D:\programs\bat>D:\programs\bat\1.bat

D:\programs\bat>D:\programs\bat\1.bat

D:\programs\bat>D:\programs\bat\1.bat

D:\programs\bat>D:\programs\bat\1.bat

D:\programs\bat>D:\programs\bat\1.bat
Start /Wait "" "D:\programs\bat\autoTln.bat"

D:\programs\bat>D:\programs\bat\1.bat  - тут я поменял параметр, т.к. первый не сработал
D:\programs\bat\autoTln.bat

D:\programs\bat>
при этом сообщение пинга было таким:
Код: Выделить весь код
Ответ от 192.168.10.1: Заданная сеть недоступна.
Ответ от 192.168.10.1: Заданная сеть недоступна.
Ответ от 192.168.10.1: Заданная сеть недоступна.
Ответ от 192.168.10.1: Заданная сеть недоступна.
Ответ от 192.168.10.1: Заданная сеть недоступна.
Ответ от 192.168.10.1: Заданная сеть недоступна.
содержание бат файла autoTln.bat
Код: Выделить весь код
d:
D:\programs\bat
autoTln.exe
программа вредная, требует чтоб ее запускали из ее директории, иначе файлы свои найти не может

сенд мэил тоже бат файлом запускаю, но там одна строка, путь до программы, программа и ключи

Последний раз редактировалось yanus74, 21-08-2012 в 16:16.


Отправлено: 15:54, 21-08-2012 | #7


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


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

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


Изображения
Тип файла: jpg 1.jpg
(268.5 Kb, 8 просмотров)

вроде разобрался , щас еще пару раз проверю

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

запускаю, запускаю скрипт, потом раза с 10го, он срабатывает, запускается батник ( открывается новое окно) пишет:
Код: Выделить весь код
d:
D:\programs\bat
autoTln.exe
exit
закрывается, и в окне, в котором я запускал скрипт больше ничего не выводит
Код: Выделить весь код
C:\Documents and Settings\Администратор>D:\programs\bat\1.bat

C:\Documents and Settings\Администратор>
щас снова пробую запустить, ничего не происходит (
не понятно


Код: Выделить весь код
@Echo Off
SetLocal
Set N=0
(0<count Set /P "N=") 2>nul
Ping ya.ru -n 2 1>nul&&Del /F /Q count 2>nul&&Exit /B 0
If %N% EQU 3 (
	Echo:netsh interface set interface name="Guest" admin=DISABLED
	Echo:ping 127.0.0.1 -n 6 1>nul
	Echo:D:\programs\bat\sandmail.bat
) Else (
	Start /Wait "" "D:\programs\bat\autoTln.bat"
	Set /A N+=1
	Call Echo:%%N%%>count
)
вот картинка, где все вместе открыто

Последний раз редактировалось yanus74, 21-08-2012 в 16:52.


Отправлено: 16:28, 21-08-2012 | #8


Аватара для El Sanchez

Ветеран


Contributor


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

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


Цитата yanus74:
я его добавил для отладки, сюда добавил запуск notepad.exe »
yanus74, все необходимое для отладки я выделил красным, не нужно ничего дописывать. Давайте по порядку, how it's made:
Set N=0 - присваиваем переменной N значение, равное 0. Это наша глобальная переменная.
(0<count Set /P "N=") 2>nul - ключ /P команды Set предназначен для ручного задания значения переменной N, т.е. в консоли пользователь пишет значение и нажимает Enter (читай - символ перевода строки). Но вместо ручного ввода в консоль пишется содержимое файла count, который будет хранить значение нашей глобальной переменной N, причем только первая строка, т.к. строки в текстовых файлах заканчиваются символом перевода.
Ping ya.ru -n 2 1>nul&&Del /F /Q count 2>nul&&Exit /B 0 - пинг сайта. Если он удачен, то удаляем файл count. Если файл удалится, то выход из скрипта. Тут нужно немного по-другому написать, а именно Ping ya.ru -n 2 1>nul&&(Del /F /Q count 2>nul&Exit /B 0)
Если пинг неудачен, то переменная N сравнивается с числом 3. Если N=3, то смена маршрута, пауза и отправка мыла. Если нет, то реконнект модема, увеличиваем значение N на 1 (Set /A N+=1) и пишем новое значение N в файл count (Call Echo:%%N%%>count).
Проставив echo перед командами, можно реально их не запускать, а просто посмотреть в консоли на эти команды. Имитируем разрыв с модемом, приписав к ya.ru, какой-нибудь символ, запустим скрипт (допустим это первый запуск, файла Count еще нет):
Код: Выделить весь код
c:\temp>test.bat
Start /Wait "" "прога через телнет"			//N=0, в count запишется 1
c:\temp>test.bat
Start /Wait "" "прога через телнет"			//N=1, в count запишется 2
c:\temp>test.bat
Start /Wait "" "прога через телнет"			//N=2, в count запишется 3
c:\temp>test.bat
netsh interface set interface name="inet" admin=DISABLED	//N=3
sendmail
c:\temp>
Цитата yanus74:
программа вредная, требует чтоб ее запускали из ее директории, иначе файлы свои найти не может »
Не нужно отдельного bat-файла, пишете:
Код: Выделить весь код
Start "" /D "D:\programs\bat" /Wait "autoTln.exe"
Цитата yanus74:
сенд мэил тоже бат файлом запускаю, но там одна строка, путь до программы, программа и ключи »
Аналогично:
Код: Выделить весь код
Start "" /D "путь к папке программы" /Wait "программа.exe" ключи программы
Это сообщение посчитали полезным следующие участники:

Отправлено: 21:30, 21-08-2012 | #9


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


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

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


чет он так и не работает, добавил задание на запуск батника, щас вот посмотрел, у модема не было интернета, дождался запуска по расписанию, окно промигнуло,и все, зпрограмма для перезагрузки роутера не открылась, что делаю не так?(
Код: Выделить весь код
@Echo Off
SetLocal
Set N=0
(0<count Set /P "N=") 2>nul
Ping ya.ru -n 2 1>nul&&Del /F /Q count 2>nul&&Exit /B 0
If %N% EQU 3 (
	netsh interface set interface name="Guest" admin=DISABLED
	ping 127.0.0.1 -n 12 1>nul
	Start "" /D "D:\programs\nnBackup\sendemail\" /Wait "sendEmail.exe" -f мыло -t мыло -u тема -m Opyat vse slomalos! -s smtp.yandex.ru:25 -xu мыло -xp пароль -o message-charset=windows-1251 -q 
) Else (
	Start "" /D "D:\programs\bat" /Wait "autoTln.exe"
	Set /A N+=1
	Call Echo:%%N%%>count
)
для проверки добавил:
Код: Выделить весь код
echo:1 test
(0<count Set /P "N=") 2>nul
echo:2 test
Ping ya.ru -n 2 1>nul&&Del /F /Q count 2>nul&&Exit /B 0
echo:3 test
запустил, результат был такой:
Код: Выделить весь код
C:\Documents and Settings\Администратор>D:\programs\bat\1.bat
1 test
2 test

C:\Documents and Settings\Администратор>
при этом, команда пинг возвращает:
Код: Выделить весь код
C:\Documents and Settings\Администратор>ping ya.ru

Обмен пакетами с ya.ru [87.250.250.203] с 32 байт данных:

Ответ от 192.168.10.1: Заданная сеть недоступна.
Ответ от 192.168.10.1: Заданная сеть недоступна.
Ответ от 192.168.10.1: Заданная сеть недоступна.
Ответ от 192.168.10.1: Заданная сеть недоступна.

Статистика Ping для 87.250.250.203:
    Пакетов: отправлено = 4, получено = 4, потеряно = 0
    (0% потерь)
Приблизительное время приема-передачи в мс:
    Минимальное = 0мсек, Максимальное = 0 мсек, Среднее = 0 мсек

C:\Documents and Settings\Администратор>
мне кажется проблема здесь :
Код: Выделить весь код
Ping ya.ru -n 2 1>nul&&Del /F /Q count 2>nul&&Exit /B 0
все понятно, условие не верно, пинг возвращает:
Код: Выделить весь код
Пакетов: отправлено = 4, получено = 4, потеряно = 0
а эта чтука работает если получено 0
Код: Выделить весь код
Ping ya.ru -n 2 1>nul&&Del /F /Q
т.е. надо двойную проверку, или, если пакеты не приходят обратно вообще или получаем ответ "Ответ от 192.168.10.1: Заданная сеть недоступна."

Последний раз редактировалось yanus74, 22-08-2012 в 10:33.


Отправлено: 10:18, 22-08-2012 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Помогите написать скрипт DeGReeS Microsoft Windows NT/2000/2003 12 01-06-2012 16:18
Помогите, написать sh скрипт webinteger Программирование в *nix 2 17-09-2010 09:01
FreeBSD - Помогите написать скрипт Stirs Общий по FreeBSD 2 25-06-2008 02:29
Помогите написать небольшой скрипт rusGT Программирование в *nix 3 04-05-2008 22:40
Помогите написать скрипт!!! Sergei Antoshkin Вебмастеру 1 13-03-2003 18:22




 
Переход