 |
|
Bat-ик который постоянно проверяет запущен ли процесс и выполняет действия
Всем привет. Есть у меня 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 /f "tokens=1-2 delims=. " %%a in ('tasklist /fo table /nh /fi "imagename eq %p1%"') do if /i "%%a.%%b" equ "%p1%" set /a is_p1+=1
for /f "tokens=1-3 delims=. " %%a in ('tasklist /fo table /nh /fi "imagename eq %p2%"') do if /i "%%a %%b.%%c" equ "%p2%" set /a is_p2+=1
:: Если запущен процесс 2, то закрыть процесс 1
if %is_p2% equ 1 >nul taskkill /im "%exe1" /f /t
:: Если не запущены процессы 1 или 2, то запустить процесс 1
if %is_p2% equ 0 (if %is_p1% equ 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
|
Вот если кому нужен, помогли на другом форуме...
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 /f "tokens=1 delims=." %%a in ('tasklist /fo table /nh /fi "imagename eq %p1%"') do if /i "%%a.exe" equ "%p1%" set /a is_p1+=1 for /f "tokens=1 delims=." %%a in ('tasklist /fo table /nh /fi "imagename eq %p2%"') do if /i "%%a.exe" equ "%p2%" set /a is_p2+=1 :: Если запущен процесс 2, то через 5 секунд закрыть процесс 1. if %is_p2% equ 1 ( >nul timeout /t 5 /nobreak >nul 2>nul taskkill /im "%p1%" /f /t ) :: изменённая постановка задачи :: 1 запущен 2 не запущен - нечего не делать :: 2 запущен 1 не запущен - нечего не делать :: 1 не запущен 2 не запущен - запустить 1 :: :: получается такая таблица истинности, :: !!для одного состояния действие НЕ специфицировано :: в постановке задачи :: +-----------+-----------+---------------------+ :: | процесс 1 | процесс 2 | действие | :: +-----------+-----------+---------------------+ :: | 0 | 0 | запустить процесс 1 | :: +-----------+-----------+---------------------+ :: | 0 | 1 | ничего не делать | :: +-----------+-----------+---------------------+ :: | 1 | 0 | ничего не делать | :: +-----------+-----------+---------------------+ :: | 1 | 1 | ??? | :: +-----------+-----------+---------------------+ if %is_p2% equ 0 (if %is_p1% equ 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:35.
© OSzone.net 2001-