[CMD] BAT для запуска второй копии EXEфайла и закрытия первой копии

klaster

Новый пользователь
Сообщения
9
Реакции
0
Добрый день!
Помогите, пожалуйста, с BAT файлом.

Запускаем BAT файл, который:
1) запускает программу PROGRAM.EXE
2) ждет 90 секунд
3) запускает вторую копию программы PROGRAM.EXE;
4) ждет 10 секунд;
5) закрывает первую копию PROGRAM.EXE;
6) ждет 80 секунд;
7) открывает третью копию PROGRAM.EXE;
8) ждет 10 секунд;
9) закрывает вторую копию PROGRAM.EXE;
10) ждет 80 секунд;
11) открывает четвертую копию PROGRAM.EXE;
и.т.д.
Должен исполняться бесконечный цикл.
Если не сложно (но не обязательно), желательно в окне видеть количество итераций.

Спасибо!
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,621
Реакции
6,060
Здравствуйте, klaster !
Добро пожаловать на SafeZone !

А по какому правилу действует этот цикл:
1. Запуск нового экземпляра каждые 90 секунд
+
2. Завершение каждого процесса по завершению 100 секунд длительности его работы

Правильно ли я понял? Или ещё какое-то условие?
 

Сергій

Разработчик
Сообщения
564
Реакции
291
PROGRAM.EXE сама себя вести так не может? (не Ваша). А если батник переименовывает PROGRAM.EXE в PROGRAM_1.EXE, запускает, переименовывает обратно в PROGRAM.EXE.... А выключение будет делать соответственно для процессов PROGRAM_1.EXE, PROGRAM_2.EXE...
 

klaster

Новый пользователь
Сообщения
9
Реакции
0
Добрый день!
Один рисунок (схема) вместо тысячи слов. Возможно, в первом посте я некорректно сформулировал вопрос. Пожалуйста, смотрите в приложенном файле схему работы.
PROGRAM.EXE поменять я не могу.
 

Вложения

  • program.exe.pdf
    113.9 KB · Просмотры: 11

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,621
Реакции
6,060
Сергей, вы это вообще о чём?

klaster, однозначно неверно. Тайминги в 1-м посте не совпадают с приложенной схемой.
Получается:
1. Запуск нового экземпляра каждые 80 секунд.
2. Длительно работы процесса - 90 секунд.

CMD/BATCH:
@echo off
SetLocal EnableExtensions

Set Duration=90
Set Step=80
Set ProcName=calc.exe

if "%~1" neq "" goto Worker
:begin
set /a n+=1
start "" /min cmd /c "%~fs0" %n%
echo Started Worker # %n%
timeout /T %Step%
goto begin

:Worker
title Worker %1
for /f "tokens=1-2 delims=," %%a in ('tasklist /NH /FO:CSV') do if /i "%%~a"=="%ProcName%" set PID.%%~b=true
start "" /min "%ProcName%"
for /f "tokens=1-2 delims=," %%a in ('tasklist /NH /FO:CSV') do if /i "%%~a"=="%ProcName%" if not defined PID.%%~b set PID=%%~b
timeout /T %Duration%
taskkill /F /PID %PID%

Замените calc.exe на свою программу. Путь к программе в переменной указывать НЕЛЬЗЯ.
Совместимость: Vista+.
 

klaster

Новый пользователь
Сообщения
9
Реакции
0
Dragokas, запустил без изменений с calc.exe. Тайминги верные (да их и в переменных можно менять), но сами окна калькулятора не закрываются после 90 секунд работы. Можно подправить, чтобы они закрывались?
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,621
Реакции
6,060
klaster, скорее всего вы запускаете код на системе Windows 8 или выше, а там calc.exe - это ланчер для процесса calculator.exe. Естественно, код об этом не знает и пытается закрыть calc.exe, которого уже не существует в списке процессов. В качестве ProcName нельзя указывать ланчер. Попробуйте заменить на notepad.exe, увидите, что работает нормально.
 

klaster

Новый пользователь
Сообщения
9
Реакции
0
Dragokas, моё почтение, все именно так, как Вы написали, с PROGRAM.EXE под моим WIN10 работает как часы!
К сожалению, только что понял, что с самого начала неправильно описал проблему.

PROGRAM.EXE запускает готовый .BAT файл который после запуска PROGRAM.EXE закрывается (назовём его STARTER.BAT, он у меня есть). Тайминги работы PROGRAMM.EXE как в моей схеме выше.
Т.е. порядок работы такой:
  1. 0sec - STARTER.BAT запускает PROGRAM.EXE(1), после этого окно STARTER.BAT само закрывается.
  2. 80sec - STARTER.BAT запускает PROGRAM.EXE(2), после этого окно STARTER.BAT само закрывается.
  3. 90sec - PROGRAM.EXE(1) закрывается.
  4. 160sec - STARTER.BAT запускает PROGRAM.EXE(3), после этого окно STARTER.BAT само закрывается.
  5. 170sec - PROGRAM.EXE(2) закрывается.
  6. 240sec - STARTER.BAT запускает PROGRAM.EXE(4), после этого окно STARTER.BAT само закрывается.
  7. 250sec - PROGRAM.EXE(3) закрывается.
  8. итд.
Есть ли возможность переписать программу под этот алгоритм?
Еще раз очень извиняюсь!
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,621
Реакции
6,060
Ничего не понял.
PROGRAM.EXE запускает STARTER.BAT, который запускает PROGRAM.EXE, который по идее опять запускает STARTER.BAT.
Какая-то рекурсия )))
  • 0sec - STARTER.BAT запускает PROGRAM.EXE(1), после этого окно STARTER.BAT само закрывается.
  • 80sec - STARTER.BAT запускает PROGRAM.EXE(2), после этого окно STARTER.BAT само закрывается.
  • 90sec - PROGRAM.EXE(1) закрывается.
  • 160sec - STARTER.BAT запускает PROGRAM.EXE(3), после этого окно STARTER.BAT само закрывается.
  • 170sec - PROGRAM.EXE(2) закрывается.
  • 240sec - STARTER.BAT запускает PROGRAM.EXE(4), после этого окно STARTER.BAT само закрывается.
  • 250sec - PROGRAM.EXE(3) закрывается.
Это же и делает мой бат. Или нет?
Ну, да, у меня ещё запускаются вспомогательные копии батника для слежения за каждым запущенным процессом, или это проблема?
 
Последнее редактирование:

klaster

Новый пользователь
Сообщения
9
Реакции
0
Такой у меня русский!
STARTER.BAT запускает PROGRAM.EXE, после этого STARTER.BAT закрывается.
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,621
Реакции
6,060
Стоп, а если
после этого окно STARTER.BAT само закрывается.
то кто будет следить за запущенным процессом и закрывать его через 90 секунд, и запускать все остальные процессы?
 

klaster

Новый пользователь
Сообщения
9
Реакции
0
Хм, как-же написать...
Первым идет STARTER.BAT, он запускает PROGRAM.EXE, после чего STARTER.BAT закрывается.
то кто будет следить за запущенным процессом и закрывать его через 90 секунд, и запускать все остальные процессы?
это должен делать новый BAT файл, который я без Вас написать не смогу.
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,621
Реакции
6,060
А, я кажется понял. Сумасшедшая схема работы :Biggrin::Biggrin::Biggrin:
Зачем это всё нужно, если не секрет?
Сейчас попробую переписать.
 

klaster

Новый пользователь
Сообщения
9
Реакции
0
Это же и делает мой бат. Или нет?
Между Вашим батником и моей программой должен быть мой батник, который и запускает программу. Получается, что ваш батник должен запустить (запускает) мой батник (который после вызова программы сам закроется), а после 90 секунд ваш батник должен закрыть программу.
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,621
Реакции
6,060
Не обижайтесь, я просто тут уже ржу от смеха, то ли потому что не могу понять схему, то ли потому что она сложнее, чем можно было бы сделать.

Ладно, если всё так, как вы пишете (т.е. в итоге, не программа запускает батник, а ваш батник запускает программу), то почему бы вам просто не добавить вызов вашего батника вместо вот этой строки:
Код:
start "" /min "%ProcName%"
моего батника?

Команда call bat.bat
 

klaster

Новый пользователь
Сообщения
9
Реакции
0
Проверил. Все работает кроме того, что по прошествию 90 секунд не закрывается окно.
 

Dragokas

Very kind Developer
Команда форума
Супер-Модератор
Разработчик
Клуб переводчиков
Сообщения
6,621
Реакции
6,060
klaster,
1. Ваш батник вызывается через call ?
2. Прототип команды запуска программы точно такой же как у меня?
3. Ваш батник возвращает управление? (должен заканчиваться на exit /b, goto :eof, или ничем, но не Exit)
 

klaster

Новый пользователь
Сообщения
9
Реакции
0
УРА! Заработало!
В Ваш батник добавил строки из своего батника, поменял SetProcName на свою программу и все заработало так, как и нужно!
 
Последнее редактирование:
Сверху Снизу