Имя пользователя:
Пароль:
 | Правила  

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

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

Старожил


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

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


Подскажите, возможно ли организовать обмен данными между двумя параллельно запущенными скриптами иначе, чем через файл-метки? Для примера, чтобы вопрос был понятнее, приведу код скрипта, в котором это используется - ожидание получения команды (в данном случае это команда на корректное завершение, с записью в лог) от пользователя не тормозит действие выполняющего основную задачу скрипта, как раз потому, что он запущен в двух экземплярах, один из которых и занимается ожиданием команды от пользователя.

Так вот, сейчас все взаимодействие между двумя "потоками" организовано исключительно за счет файлов-меток. Общие переменные отпадают, так как сколько бы не изменял значение переменной процесс-потомок, в процессе-родителе оно останется неизменным. Или может я ошибаюсь, и всё же использовать общие переменные как-то возможно?

Образец скрипта
Код: Выделить весь код
@Echo Off
:: v1.5, Anonymous, 2011
:: Скрипт для проверки статуса выбранного IP и создания лога с записями о его смене.

:: Ведение лога
Set Logging=true
:: Таймаут в секундах
Set Timeout=15
:: Упрощенная проверка ответа
:: (меньше нагружает процессор, может давать ложный результат)
Set SimpleCheck=false
:: Звуковая сигнализация при статусе "Online"
Set UseSound=true

:: Диалог ввода адреса или выбора из заранее подготовленных
If "%SelfStart%"=="" (GoTo Launcher)
Cls
Title Ping2Host
Echo.
Echo      g - Google public DNS (8.8.8.8)
Echo      s - Server (192.168.50.5)
Set /P Host=  Enter IP or hostname:^> 
If /I "%Host%"=="G" Set Host=8.8.8.8
If /I "%Host%"=="S" Set Host=192.168.50.5

:: Запуск второй копии внутри первой
:: (для организации примитивного управления вторым запущенным процессом)
:Launcher
If "%SelfStart%"=="" (
Set SelfStart=yes
Start /B "" "%~nx0"
GoTo WaitUserCommands
)

:: Подготовка к запуску пингера
Cls&Set Total=0&Set Succes=0&Set Fail=0&Set Status=Not checked yet&Set isReady=0&Set StartTime=[%date% - %time:~-0,8%]
Set /A Sleep=(Timeout-1)*1000
If /I "%SimpleCheck%"=="true" (Set CheckCmd=Ping -n 1 -w 1000 -l 1024 %Host%^>nul) Else (Set CheckCmd=Ping -n 1 -w 1000 -l 1024 %Host%^|Find "TTL="^>nul)
If %Logging%==true (Set LogFile="%~n0.log") Else (Set LogFile=nul)
:: Цикл пингера
Echo.>>%LogFile%&Echo Started at %StartTime%>>%LogFile%
:ShowStats
Call :Stats
.\bin\nc.exe wait %Sleep%
%CheckCmd%
If %ErrorLevel% GTR 0 (
Set /A Fail+=1
If Not "%Status%"=="Offline" (Echo %date% - %time:~-0,8% ^>^> %Host% is offline>>%LogFile%)
Set Status=Offline
Title Offline [%Host%] - Ping2Host
) Else (
Set /A Succes+=1
If Not "%Status%"=="Online" (
Echo %date% - %time:~-0,8% ^>^> %Host% is active>>%LogFile%
If %UseSound%==true (
Start /B .\bin\hs_play.exe .\data\online.wav
)
)
Set Status=Online
Title Online [%Host%] - Ping2Host
)
:: Проверка на запрос завершения работы от первой копии процесса
If Exist stop.flag (
Echo Closed at [%date% - %time:~-0,8%], last status: %Status%>>%LogFile%
Del stop.flag
If Exist ready.flag Del ready.flag
Exit
)
GoTo ShowStats

:: Шаблон окна со статистикой
:Stats
If Exist ready.flag (
Del ready.flag
Set isReady=1
)
Cls
Echo.
Echo  Started at: %StartTime%
Echo.
Echo  Target: %Host%
Echo  Online: %Succes% times, Offline: %Fail% times
Echo  Current status: [%date% - %time:~-0,8%] - %Status%
Echo.
If %isReady%==1 (
Echo  Press Esc to terminate process
) Else (
Echo.
)
Exit /B

:: Создание флага завершения работы по нажатию выбранной кнопки
:: (при желании избавиться от внешних утилит - заменяется на pause и срабатывает соответственно,
:: от любой кнопки)
:: Создана задержка для невозможности завершения работы сразу после первого цикла
:WaitUserCommands
Set /A ExitDelay=(Timeout*3-1)*1000
.\bin\nc.exe wait %ExitDelay%
Echo.>ready.flag
:: Проверка на код нажатой клавиши
:CheckInput
.\bin\hs_readkey
If %ErrorLevel%==27 (Echo.>stop.flag) Else (GoTo CheckInput)
Exit

Отправлено: 09:49, 27-11-2011

 

Ветеран


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

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


Цитата Anonymоus:
и всё же использовать общие переменные как-то возможно? »
Думаю, так нельзя. Можно передавать параметры при вызове другого батника ( call ) и получать от него нужные значения, но только после того, как он отработает. Т.е. все равно получается переключение между процессами.

Отправлено: 11:40, 27-11-2011 | #2



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

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


Старожил


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

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


попробуйте через TITLE и TASKLIST /FI WINDOWTITLE
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:59, 27-11-2011 | #3


Старожил


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

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


kiripanda, спасибо большое, именно этот вариант и буду использовать.
И ещё, долгой и счастливой жизни тем господам локализаторам, которые сотворили ЭТО: http://social.technet.microsoft.com/...-c5bfa351d6e1/

Отправлено: 18:44, 27-11-2011 | #4



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
[решено] Javascript: конфликт между двумя скриптами morgan1991 Вебмастеру 5 23-06-2013 05:01
[решено] обмен данными между скриптами aasavelev AutoIt 4 17-10-2010 10:30
CMD/BAT - [решено] разница между bat и cmd alexandri Скриптовые языки администрирования Windows 2 11-01-2010 22:29
[решено] HotKeySet() для одновременного управления несколькими скриптами Lyuk AutoIt 7 25-08-2009 17:23
Проблемка с скриптами Denis Shutka Вебмастеру 6 21-03-2005 02:10




 
Переход