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

Ответить
 • Просмотры: 1
Аватара пользователя
root221

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

Сообщение root221 »

Проверка соединения с другим компьютером



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



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





Код:

Код: Выделить всё

msg * Соединение установлено

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





Код:

Код: Выделить всё

@echo off
SetLocal
Set /P "i= "
If /I "%i%"=="t" (  )
Аватара пользователя
WoW

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

Сообщение WoW »

Код:

Код: Выделить всё

@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

Так?
Аватара пользователя
root221

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

Сообщение root221 »

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
Аватара пользователя
Iska

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

Сообщение Iska »

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

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

Сообщение root221 »

Цитата root221:



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

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




А вы не забываете, что консоль-то у нас однозадачная? Она не умеет что-то делать в фоне, и одновременно с этим работать с чем-то ещё. Одновременно может исполняться только одна задача.

Но с помощью вот такого нехитрого трюка можно сделать псевдо-"многозадачность", запуская несколько процессов одного и того же скрипта внутри самого себя. Первый - ожидает команды от пользователя и передает их, второй - получает команды от первого, обрабатывает и передает управление на нужную метку. А там - смотря по ситуации, в случае с командой "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
Аватара пользователя
root221

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

Сообщение root221 »

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
Ответить

Вернуться в «Скриптовые языки администрирования Windows»