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

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

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

Аватара для root221

Старожил


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

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


Изменения
Автор: root221
Дата: 01-03-2012
Проверка соединения с другим компьютером

пока нет соединения с ip 10.0.0.5 надо повторять проверку снова и снова, пока соединение не появится.

Если пинг удачный, тогда показать сообщение

Код: Выделить весь код
msg * Соединение установлено
и желательно бы сразу встроить сюда, что бы я ввёл t и вашь скрипт сразу начал работать.

Код: Выделить весь код
@echo off

SetLocal
Set /P "i= "
If /I "%i%"=="t" (  )

Отправлено: 01:27, 01-03-2012

 
WoW WoW вне форума

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


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

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


Код: Выделить весь код
@echo off
echo Введите букву
SET /P "i="
if "%i%"=="t" (goto start) else (goto exit)
:start
ping 10.0.0.5 -n 3 >nul
if %errorlevel%==0 (goto run) else (goto end)
:end
goto :start
:run
msg * Соединение установлено
:exit
exit
Так?

Последний раз редактировалось WoW, 02-03-2012 в 02:00.


Отправлено: 01:14, 02-03-2012 | #2



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

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


Аватара для root221

Старожил


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

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


WoW, Почти но не так, и вашь батник не сможет долго выполнять свою задачу, т.к произойдёт лаг и он просто завершится(

так будет намного проще, быстрее и меньше нагрузки на комп...

просто мне нужно этот скрипт

Код: Выделить весь код
:sendmsg
 >nul ping 10.0.0.5 -n 1 -w 100 && (msg * Соединение установлено & exit /b)
call :sendmsg
как-то связать с этим....

Код: Выделить весь код
@echo off

SetLocal
Set /P "i= "
If /I "%i%"=="t" ()
надо что бы скрипт не зацикливался, а давал мне возможность во время исполнения команды t вводить, другие команды.

так не прокатывает, он зацикливается на одном и не даёт мне ввести другой параметр....

Код: Выделить весь код
@echo off
:end
SetLocal
Set /P "i= "
If /I "%i%"=="t" (call :sendmsg)
goto :end

:sendmsg
 >nul ping 10.0.0.5 -n 1 -w 100 && (msg * Соединение установлено & exit /b)
call :sendmsg
пока-что, сделал с двумя батниками

так

Цитата:
это первый - start.bat
Код: Выделить весь код
:end
SetLocal
Set /P "i=Введите команду "
If /I "%i%"=="t" (endlocal & Call Start /B "" cmd.exe /c sendmsg.bat>nul)
goto :end
это второй - sendmsg.bat
Код: Выделить весь код
@Echo Off
:sendmsg
 >nul ping 10.0.0.5 -n 1 -w 100 && (msg * Соединение установлено & exit /b)
call :sendmsg
А вот как сделать всё в одном даже не представляю
Объясняю как они работают:

мой скрипт start.bat запускает второй батник sendmsg.bat, который у меня работает в фоновом режиме не открывая нового окна, а когда появляется связь с компьютером 10.0.0.5 тогда выполняет команду msg * Соединение установлено. и выходит из функции & Exit /b

И всё это не мешает работать первому start.bat и не зацикливается на одном и у меня не пропадает возможность ввода, других комманд....

Добавлено:

Если это никак нельзя сделать в одном, тогда следующий вопрос.

Как сделать, что бы мой батник, создавал второй батник, например в папке %temp% и что бы мой скрипт, выполнял его из папки %temp% когда я выберу параметр в консоле t

Последний раз редактировалось root221, 02-03-2012 в 02:46.


Отправлено: 02:24, 02-03-2012 | #3


Ветеран


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

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


root221, Вы что, интерпретатор команд на cmd пытаетесь написать, что ли?

Отправлено: 03:01, 02-03-2012 | #4


Аватара для root221

Старожил


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

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


Iska, ахаха) Нет, я много веть не прошу)

Отправлено: 09:27, 02-03-2012 | #5


Старожил


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

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


Цитата root221:
надо что бы скрипт не зацикливался, а давал мне возможность во время исполнения команды t вводить, другие команды.
так не прокатывает, он зацикливается на одном и не даёт мне ввести другой параметр.... »
А вы не забываете, что консоль-то у нас однозадачная? Она не умеет что-то делать в фоне, и одновременно с этим работать с чем-то ещё. Одновременно может исполняться только одна задача.
Но с помощью вот такого нехитрого трюка можно сделать псевдо-"многозадачность", запуская несколько процессов одного и того же скрипта внутри самого себя. Первый - ожидает команды от пользователя и передает их, второй - получает команды от первого, обрабатывает и передает управление на нужную метку. А там - смотря по ситуации, в случае с командой "t" - запускает в фоне третий процесс, который пингует нужный хост, в случае с командой "test" - просто выводит надпись, не стартуя ещё одного процесса.

Код: Выделить весь код
@Echo Off
:: Назначаем временный файл, с помощью которого будут передаваться команды
Set CmdFile=%Temp%\cmd_%Random%.tmp

:: Проверка на запуск второй копии
If "%SelfStart%"=="" (GoTo ControlThread)

:Main
:: Если команды от первой копии ещё не поступало, ждем в цикле
If Not Exist "%CmdFile%" Ping -n 3 127.0.0.1>nul& GoTo Main
Set /P UserCmd=<"%CmdFile%"
:: Проверка на существование метки, перенаправление
Find /I ":[%UserCmd%]" "%~nx0">nul&&(
Del "%CmdFile%"
GoTo [%UserCmd%]
)||(
Del "%CmdFile%"
Echo Command not found
GoTo Main
)

:: Запускаем ещё одну копию скрипта, обрабатывающую команды от первой
:ControlThread
If "%SelfStart%"=="" (
Set SelfStart=yes
Start /B "" "%~nx0"
GoTo WaitUserUserCmds
)

:: Ждем команду от пользователя, перенаправляем второй копии
:WaitUserUserCmds
Cls
Echo   Enter your command:
If Not "%UserCmd%"=="" (Echo ^> %UserCmd%)
Set UserCmd=
Set /P UserCmd=

If Not "%UserCmd%"=="" Echo %UserCmd%>"%CmdFile%"
GoTo WaitUserUserCmds


:: Здесь находятся метки-"команды", каждая после завершения работы возвращает управление на main

:[test]
:: Тестовая команда для проверки
Echo.
Echo             TEST
Echo.
GoTo Main

:[t]
:: Создаем временный батник, который и запускаем внутри того же окна в фоне, третьим процессом
:: Можно бы было сделать проверку на повторный ввод команды, если уже запущена, но лень играться с флагами
>"%Temp%\sendmsg.cmd" (
Echo @echo off
Echo :sendmsg
Echo ^>nul ping 10.0.0.5 -n 1 -w 100 ^&^& ^(msg * Соединение установлено ^& exit /b^)
Echo call :sendmsg
)
Start /B "" "%Temp%\sendmsg.cmd"
Echo Мониторинг доступности 10.0.0.5 запущен
GoTo Main

Последний раз редактировалось Anonymоus, 02-03-2012 в 13:25.

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

Отправлено: 11:01, 02-03-2012 | #6


Аватара для root221

Старожил


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

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


Anonymоus,

Вашь вариант разберу позже и отвечу вам, всё ли вы мне сделали так, как хотелось бы.

Вот вариант, который вполне справляется с моей задачей....

Код: Выделить весь код
@echo off
if /i "%1"=="SENDMSG" (GoTo:sendmsg)

:comandloop
setlocal
Set /P "i= "
If /I "%i%"=="t" (call start "" /B cmd.exe /c "%~f0" SENDMSG)
EndLocal
GoTo :comandloop

:sendmsg
>nul ping -n 2 -w 1000 10.0.0.5 && (msg * Соединение установлено & GoTo :Eof)
goto:sendmsg

Отправлено: 21:20, 02-03-2012 | #7



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] как сделать проверку файла (файлов) через cmd CaHeK_pk Скриптовые языки администрирования Windows 10 30-09-2011 20:51
Разное - как сделать чтоб перед экраном загрузчика (Logonui) вышла картинка rushen Оформление Windows XP 9 22-08-2010 14:14
Задача - сделать возможность бекапа перед установкой системы через RIS Shestipaliy Автоматическая установка Windows 2000/XP/2003 3 08-04-2009 12:43
как сделать автоконект при потери соединения в VPN? EndErr Microsoft Windows NT/2000/2003 5 30-11-2007 09:01
Как сделать так, чтобы ДОС программа загружалась перед Win9x Guest Microsoft Windows 95/98/Me (архив) 6 12-07-2004 09:22




 
Переход