0 / 0 / 0
Регистрация: 05.12.2016
Сообщений: 12
1

Постоянно проверять, запущены ли заданные процессы, и в зависимости от результата выполнять указанные действия

14.01.2017, 16:55. Показов 1454. Ответов 18
Метки нет (Все метки)

Всем привет. Есть у меня 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.15 8\deploy\League of Legends.exe

Так вот, мне нужно что бы была постоянная проверка(1-2 секунды). Если запущен процесс 2, то закрыть процесс 1. Если не запущены процессы 1 или 2, то запустить процесс 1.

Всем большое спасибо за помощь!
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.01.2017, 16:55
Ответы с готовыми решениями:

Выполнять действия в зависимости от состояния радиокнопок
Пишу калькулятор. Для десятичной системы всё отлично. Хочу сделать так: при переключении radio...

Напишите в среде Excel макрос, который в выделенном диапазоне ячеек должен выполнять заданные действия
Напишите в среде Excel макрос, который в выделенном диапазоне ячеек должен выполнять заданные...

Проверять, запущен ли процесс, а если не запущен, то выполнять действия
Всем привет! Помогите пожалуйста с такой проблемой: пытаюсь создать bat для циклической проверки...

Выполнять действия в зависимости от выбранного пункта RadioButton
Всем привет. Есть кнопка необходимо по ее нажатию выполнять различные действия в зависимости от...

18
654 / 279 / 107
Регистрация: 17.03.2014
Сообщений: 681
15.01.2017, 04:58 2
так подойдёт?
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
@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 taskkill /im "%p1%"
 
                           :: Если не запущены процессы 1 или 2, то запустить процесс 1
  
  if %is_p2% equ 0 (if %is_p1% equ 0 2>nul start "" "%p1%")
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
1
0 / 0 / 0
Регистрация: 05.12.2016
Сообщений: 12
15.01.2017, 14:17  [ТС] 3
b0gus, Добрый день, проверю - Отпишусь=) Спасибо
0
0 / 0 / 0
Регистрация: 05.12.2016
Сообщений: 12
15.01.2017, 14:56  [ТС] 4
Возник ряд проблем.
1) Батик работает только если кинуть его в папку с *.exe, по другому не видит. Думал проблема в пробелах, но нет. Кинул файл D:\*.exe , но не видит файл. Работает только с одного каталога с файлом. ( ошибка в 2.png )
2) Так же не работает первое условие закрытия. ( 1.png )

Я предполагаю что bat не видит второй файл, так как он находи в другом каталоге, а не с bat непосредственно. Из за этого и все ошибки.

Заключение: Нужно решить проблему с тем что bat не видит файлы если задать к ним адрес, пробовал гуглить... пока успехом не могу похвастаться. Если кто знает в чем проблема помогите пожалуйста.

Всем спасибо за помощь.
0
Миниатюры
Постоянно проверять, запущены ли заданные процессы, и в зависимости от результата выполнять указанные действия   Постоянно проверять, запущены ли заданные процессы, и в зависимости от результата выполнять указанные действия  
654 / 279 / 107
Регистрация: 17.03.2014
Сообщений: 681
15.01.2017, 15:10 5
Цитата Сообщение от Dmitry1995 Посмотреть сообщение
Возник ряд проблем.
Батик работает только если кинуть его в папку с *.exe, по другому не видит.
прошу прощения, мой прокол
20-ю строку следует записать так
Windows Batch file
20
if %is_p2% equ 0 (if %is_p1% equ 0 2>nul start "" "%exe1%")
1
0 / 0 / 0
Регистрация: 05.12.2016
Сообщений: 12
15.01.2017, 15:27  [ТС] 6
еще кое что проверил, задал в начале:

Windows Batch file
1
2
set "p1=LeagueClient.exe"
set "p2=nvidiaInspector.exe"
Скинул оба файла в одну папку и bat туда же. Открыл бат, открылся р1, после чего я запустил р2, но р1 не закрылся...

Добавлено через 1 минуту
b0gus, не увидел ваше сообщение последнее, сейчас проверю.

Добавлено через 13 минут
Цитата Сообщение от b0gus Посмотреть сообщение
прошу прощения, мой прокол
20-ю строку следует записать так
Windows Batch file
20
if %is_p2% equ 0 (if %is_p1% equ 0 2>nul start "" "%exe1%")
Теперь видит exe по адресу, но все ровно не закрывает процесс.

Возможно дело в том что что после запуска почему-то(так сделана игра) в процессах файл LeagueClient.exe уже находиться по пути:
D:\Games\League of Legends\RADS\projects\league_client\releases\0.0.0.44\deploy
а не как ранее:
D:\Games\League of Legends\

Так же пробывал вот так:

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
@echo off
set "p1=D:\Games\League of Legends\LeagueClient.exe"
set "p2=League of Legends.exe"
set "p3=LeagueClient.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 taskkill /im "%p3%"
 
                           :: Если не запущены процессы 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
но всеровно не сработало(
0
0 / 0 / 0
Регистрация: 05.12.2016
Сообщений: 12
15.01.2017, 15:51  [ТС] 7
Еще раз кое что проверил, задал вначале
Windows Batch file
1
2
set "p1=AIMP.exe"
set "p2=nvidiaInspector.exe"
ситуация как на картинке и всеровно не закрывается р1 . Прихожу к выводу что проблема где-то в самой функции закрытия процесса..
0
Миниатюры
Постоянно проверять, запущены ли заданные процессы, и в зависимости от результата выполнять указанные действия  
654 / 279 / 107
Регистрация: 17.03.2014
Сообщений: 681
15.01.2017, 16:19 8
Dmitry1995, попробуем так:
1. запустите LeagueClient.exe
2. в командной строке выполните
Windows Batch file
1
taskkill /im "LeagueClient.exe" /f /t
3. получилось?
1
0 / 0 / 0
Регистрация: 05.12.2016
Сообщений: 12
15.01.2017, 17:04  [ТС] 9
Цитата Сообщение от b0gus Посмотреть сообщение
Dmitry1995, попробуем так:
1. запустите LeagueClient.exe
2. в командной строке выполните
Windows Batch file
1
taskkill /im "LeagueClient.exe" /f /t
3. получилось?
Microsoft Windows [Version 6.1.7601]
(c) Корпорация Майкрософт (Microsoft Corp.), 2009. Все права защищены.

C:\Users\Dmitry>taskkill /im "LeagueClient.exe" /f /t
Успешно: Процесс, с идентификатором 3152, дочерний процесса 6968, был завершен.
Успешно: Процесс, с идентификатором 3240, дочерний процесса 6968, был завершен.
Успешно: Процесс, с идентификатором 6968, дочерний процесса 5560, был завершен.
Успешно: Процесс, с идентификатором 5560, дочерний процесса 3268, был завершен.

все получилось

Добавлено через 3 минуты
Вроде бы нашел проблему, но не знаю как исправить.

Вообщем похоже не распознает р2, т.к. если включить р1 и р2, а после закрыть р1, то р1 запускается опять.

Добавлено через 6 минут
если так, то всеровно срабатывает:
Microsoft Windows [Version 6.1.7601]
(c) Корпорация Майкрософт (Microsoft Corp.), 2009. Все права защищены.

C:\Users\Dmitry>taskkill /im "League of Legends.exe" /f /t
Успешно: Процесс, с идентификатором 6476, дочерний процесса 7256, был завершен.
0
654 / 279 / 107
Регистрация: 17.03.2014
Сообщений: 681
15.01.2017, 17:46 10
Dmitry1995, в таком случае попробуйте такой код,
составленный по постановке задачи в 1-ом посте
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
@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 "" "%p1%")
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
Добавлено через 1 минуту
Цитата Сообщение от Dmitry1995 Посмотреть сообщение
Вообщем похоже не распознает р2, т.к. если включить р1 и р2, а после закрыть р1, то р1 запускается опять.
ваша постановка задачи:
Если запущен процесс 2, то закрыть процесс 1. Если не запущены процессы 1 или 2, то запустить процесс 1.
1
0 / 0 / 0
Регистрация: 05.12.2016
Сообщений: 12
15.01.2017, 18:42  [ТС] 11
Цитата Сообщение от b0gus Посмотреть сообщение
Dmitry1995, ваша постановка задачи:
Если запущен процесс 2, то закрыть процесс 1. Если не запущены процессы 1 или 2, то запустить процесс 1.
2 задача така:
1 запущен 2 не запущен - нечего не делать
2 запущен 1 не запущен - нечего не делать
1 не запущен 2 не запущен - запустить 1
Я может не так сформулировал)

Сейчас проверю ваш код)
Спасибо за помощь

Добавлено через 11 минут
Цитата Сообщение от b0gus Посмотреть сообщение
Dmitry1995, в таком случае попробуйте такой код,
составленный по постановке задачи в 1-ом посте
к сожалению не закрывает р1 при открытии р2... Даже не знаю в чем проблема.

Добавлено через 8 минут
поставил
if %is_p2% equ 0 >nul taskkill /im "%exe1" /f /t
Хотел проверить работает ли киллер-процеса, запустил и убил. Наверно is_p2 не видет
0
654 / 279 / 107
Регистрация: 17.03.2014
Сообщений: 681
16.01.2017, 19:43 12
Цитата Сообщение от Dmitry1995 Посмотреть сообщение
Наверно is_p2 не видет
верно, опять не доглядел за пробелами в имени процесса
вот исправленный код
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
@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
            :: %p1%   - ТОЛЬКО имя процесса 1
: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, то закрыть процесс 1.  
 
  if %is_p2% equ 1 >nul taskkill /im "%exe1" /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 2>nul start "" "%p1%")
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
0
0 / 0 / 0
Регистрация: 05.12.2016
Сообщений: 12
16.01.2017, 20:59  [ТС] 13
Заработал вот так:

Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
@echo off
            :: %p1% %p2% полный путь и имя процесса!!!
 
set "p1=D:\Games\League of Legends\LeagueClient.exe"
set "p2=League of Legends.exe"
set "p3=LeagueClient.exe"
 
call :parse "%p1%" exe1 p1
 
            :: здесь:
            :: %exe1% - полный путь и имя процесса 1
            :: %p1%   - ТОЛЬКО имя процесса 1
: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, то закрыть процесс 1.  
 
  if %is_p2% equ 1 >nul taskkill /im "%p3%" /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 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
Правда выдает ошибки ) когда р2 открыт, а р1 закрыт.

Ошибка: Не удается найти процесс "LeagueClient.exe".
Ошибка: Не удается найти процесс "LeagueClient.exe".
Ошибка: Не удается найти процесс "LeagueClient.exe".
Ошибка: Не удается найти процесс "LeagueClient.exe".
Ошибка: Не удается найти процесс "LeagueClient.exe".

Но все работает)

Спасибо большое.
0
654 / 279 / 107
Регистрация: 17.03.2014
Сообщений: 681
16.01.2017, 21:32 14
Лучший ответ Сообщение было отмечено Dmitry1995 как решение

Решение

не нужно задавать переменную p3:
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
@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:\Games\League of Legends\LeagueClient.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, то закрыть процесс 1.  
 
  if %is_p2% equ 1 >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 "" "%p1%")
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
1
0 / 0 / 0
Регистрация: 05.12.2016
Сообщений: 12
16.01.2017, 22:24  [ТС] 15
Цитата Сообщение от b0gus Посмотреть сообщение
не нужно задавать переменную p3:
до этого почему-то не срабатывало. Теперь все хорошо.
Еще такой вопросил, а возможно сделать что бы при обнаружении р2 закрывать р1 с задержкой?
0
654 / 279 / 107
Регистрация: 17.03.2014
Сообщений: 681
16.01.2017, 22:26 16
Цитата Сообщение от Dmitry1995 Посмотреть сообщение
при обнаружении р2 закрывать р1 с задержкой?
сколько секунд?
1
0 / 0 / 0
Регистрация: 05.12.2016
Сообщений: 12
16.01.2017, 22:27  [ТС] 17
Большое спасибо вам за все ваши старания, очень признателен. =)

Добавлено через 27 секунд
Цитата Сообщение от b0gus Посмотреть сообщение
сколько секунд?
сделайте 5, если возможно.
0
654 / 279 / 107
Регистрация: 17.03.2014
Сообщений: 681
16.01.2017, 22:31 18
Лучший ответ Сообщение было отмечено Dmitry1995 как решение

Решение

Dmitry1995, пожалуйста
сделайте 5, если возможно.
Windows Batch file
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
@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:\Games\League of Legends\LeagueClient.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 "" "%p1%")
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
1
0 / 0 / 0
Регистрация: 05.12.2016
Сообщений: 12
16.01.2017, 22:35  [ТС] 19
Цитата Сообщение от b0gus Посмотреть сообщение
Dmitry1995, пожалуйста
Вы круты)


СПАСИБО!!!!
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.01.2017, 22:35

Как сделать событие (или метод), который постоянно будет проверять наши действия?
Здравствуйте. Вот сижу и думаю. К примеру, в WindowsForms есть события, которые реагируют на какое...

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

Ввести с клавиатуры целое число; в зависимости от значения, произвести указанные действия в заданных массивах
Здравствуйте, нужна помощь с кодом. Ввести с клавиатуры целое число. Если число равно 1,то ...

Логин к сайту и действия в зависимости от результата
Помогите создать программу, начинку я уже сделал нужно только подключиться к Darkorbit.ru и ввести...

В зависимости от упорядочености строк матрицы по возрастанию выполнить различные заданные действия
Решить с использованием процедур Добавлено через 2 часа 19 минут 25. Дана квадратная матрица...

Выполнить заданные команды в зависимости от результата проверки наличия папок или файлов в заданной директории
Здравствуйте! Задача 1. Необходимо проверить наличие папок либо файлов в директории D:\temp....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.