Показать полную графическую версию : [решено] Как сделать проверку соединения с выводом результата в [ msg * text]
Проверка соединения с другим компьютером
пока нет соединения с ip 10.0.0.5 надо повторять проверку снова и снова, пока соединение не появится.
Если пинг удачный, тогда показать сообщение
msg * Соединение установлено
и желательно бы сразу встроить сюда, что бы я ввёл t и вашь скрипт сразу начал работать.
@echo off
SetLocal
Set /P "i= "
If /I "%i%"=="t" ( )
@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, Почти но не так, и вашь батник не сможет долго выполнять свою задачу, т.к произойдёт лаг и он просто завершится(
так будет намного проще, быстрее и меньше нагрузки на комп...
просто мне нужно этот скрипт
: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, Вы что, интерпретатор команд на cmd пытаетесь написать, что ли?
Iska, ахаха) Нет, я много веть не прошу)
Anonymоus
02-03-2012, 11:01
надо что бы скрипт не зацикливался, а давал мне возможность во время исполнения команды 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,
Вашь вариант разберу позже и отвечу вам, всё ли вы мне сделали так, как хотелось бы.
Вот вариант, который вполне справляется с моей задачей....
@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
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.