Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Как сделать проверку соединения с выводом результата в [ msg * text] (http://forum.oszone.net/showthread.php?t=229186)

root221 01-03-2012 01:27 1869709

Как сделать проверку соединения с выводом результата в [ msg * text]
 
Проверка соединения с другим компьютером

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

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

Код:

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

Код:

@echo off

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


WoW 02-03-2012 01:14 1870518

Код:

@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 02-03-2012 02:24 1870552

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 02-03-2012 03:01 1870559

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

root221 02-03-2012 09:27 1870630

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

Anonymоus 02-03-2012 11:01 1870726

Цитата:

Цитата 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


root221 02-03-2012 21:20 1871166

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



Время: 10:09.

Время: 10:09.
© OSzone.net 2001-