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

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

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

Аватара для Bastel

Пользователь


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

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


Всем привет. Есть у меня 2-а процесса(файла):

1) D:\Games\League of Legends\LeagueClient.exe
2) D:\Games\League of Legends\RADS\solutions\lol_game_client_sln\releases\0.0.1.158\deploy\League of Legends.exe

Задачи:
1) Мне нужно что бы была постоянная проверка(1-2 секунды).
2) Если запущен процесс 2, то закрыть процесс 1.
3)1 запущен 2 не запущен - нечего не делать; 2 запущен 1 не запущен - нечего не делать; 1 не запущен 2 не запущен - запустить 1

Один человек на другом форуме помог мне придти к такому коду:

PHP код: Выделить весь код

@echo off

set 
"p1=D:\Games\League of Legends\LeagueClient.exe"
set "p2=League of Legends.exe"
call :parse "%p1%" exe1 p1
 
:loop
  set 
/a is_p1=0,is_p2=0
                           
:: мне нужно что бы была постоянная проверка(1-2 секунды)
 
  >
nul timeout /t 2 /nobreak
  
for /"tokens=1-2 delims=. " %%a in ('tasklist /fo table /nh /fi "imagename eq %p1%"') do if /"%%a.%%b" equ "%p1%" set /a is_p1+=1
  
for /"tokens=1-3 delims=. " %%a in ('tasklist /fo table /nh /fi "imagename eq %p2%"') do if /"%%a %%b.%%c" equ "%p2%" set /a is_p2+=1
 
                           
:: Если запущен процесс 2то закрыть процесс 1
  
  
if %is_p2equ 1 >nul taskkill /im "%exe1" //t
 
                           
:: Если не запущены процессы 1 или 2то запустить процесс 1
  
  
if %is_p2equ 0 (if %is_p1equ 0 2>nul start "" "%exe1%")
goto:loop
____________________________________________________________________
 
:parse
setlocal
  set 
"t=%~1"
  
set "t="%t:=" "%""
  
for %%v in (%t%) do set "t=%%~v"  
endlocal set "%2=%~1" set "%3=%t%" exit /b 0 


Отправлено: 19:11, 15-01-2017

 

Аватара для Bastel

Пользователь


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

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


Вот если кому нужен, помогли на другом форуме...
PHP код: Выделить весь код

@echo off
            
:: %p1% %p2полный путь и имя процесса!!!
 
set "p1=D:\Games\League of Legends\LeagueClient.exe"
set "p2=League of Legends.exe"
 
call :parse "%p1%" exe1 p1
 
            
:: здесь:
            :: %
exe1% - полный путь и имя процесса 1,
            ::          
т.е.= D:GamesLeague of LegendsLeagueClient.exe
            
:: %p1%   - ТОЛЬКО имя процесса 1,
            ::          
т.е. = LeagueClient.exe
:loop
  set 
/a is_p1=0,is_p2=0
 
            
:: мне нужно что бы была постоянная проверка(1-2 секунды)
 
  >
nul timeout /t 2 /nobreak
  
for /"tokens=1 delims=." %%a in ('tasklist /fo table /nh /fi "imagename eq %p1%"') do if /"%%a.exe" equ "%p1%" set /a is_p1+=1
  
for /"tokens=1 delims=." %%a in ('tasklist /fo table /nh /fi "imagename eq %p2%"') do if /"%%a.exe" equ "%p2%" set /a is_p2+=1
 
            
:: Если запущен процесс 2то через 5 секунд закрыть процесс 1.  
 
  
if %is_p2equ 1 (
    >
nul timeout /t 5 /nobreak
    
>nul 2>nul taskkill /im "%p1%" //t
  
)
 
            :: 
изменённая постановка задачи
            
:: 1 запущен 2 не запущен нечего не делать
            
:: 2 запущен 1 не запущен нечего не делать
            
:: 1 не запущен 2 не запущен запустить 1 
            
::
            :: 
получается такая таблица истинности,
            :: !!
для одного состояния действие НЕ специфицировано
            
:: в постановке задачи
            
:: +-----------+-----------+---------------------+
            :: | 
процесс 1 процесс 2 действие            |
            :: +-----------+-----------+---------------------+
            :: | 
0         0         запустить процесс 1 |
            :: +-----------+-----------+---------------------+
            :: | 
0         1         ничего не делать    |
            :: +-----------+-----------+---------------------+
            :: | 
1         0         ничего не делать    |
            :: +-----------+-----------+---------------------+
            :: | 
1         1         | ???                 |
            :: +-----------+-----------+---------------------+
  
  if %
is_p2equ 0 (if %is_p1equ 0 >nul 2>nul start "" "%exe1%")
goto:loop
____________________________________________________________________
 
:parse
setlocal
  set 
"t=%~1"
  
set "t="%t:=" "%""
  
for %%v in (%t%) do set "t=%%~v"  
endlocal set "%2=%~1" set "%3=%t%" exit /b 0 


Отправлено: 22:36, 16-01-2017 | #2



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

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



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Определить запущен ли процесс по указанному пути Wraith21 Скриптовые языки администрирования Windows 4 12-02-2016 18:09
CMD/BAT - [решено] bat который при запуске системы проверяет дату и запускается в hh.dd.mm.yyyy infoman1@vk Скриптовые языки администрирования Windows 15 07-07-2014 15:02
VBS/WSH/JS - [решено] Проверка ли запущен процесс Raf-9600 Скриптовые языки администрирования Windows 1 26-04-2012 13:15
CMD/BAT - [решено] Проверка запущен ли процесс Abricosio Скриптовые языки администрирования Windows 5 22-02-2012 00:17
Теория - Как определить запущен ли процесс? Gmix Программирование и базы данных 3 30-06-2004 15:14




 
Переход