[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;
и.т.д.
Должен исполняться бесконечный цикл.
Если не сложно (но не обязательно), желательно в окне видеть количество итераций.

Спасибо!
 
Здравствуйте, klaster !
Добро пожаловать на SafeZone !

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

Правильно ли я понял? Или ещё какое-то условие?
 
PROGRAM.EXE сама себя вести так не может? (не Ваша). А если батник переименовывает PROGRAM.EXE в PROGRAM_1.EXE, запускает, переименовывает обратно в PROGRAM.EXE.... А выключение будет делать соответственно для процессов PROGRAM_1.EXE, PROGRAM_2.EXE...
 
Добрый день!
Один рисунок (схема) вместо тысячи слов. Возможно, в первом посте я некорректно сформулировал вопрос. Пожалуйста, смотрите в приложенном файле схему работы.
PROGRAM.EXE поменять я не могу.
 

Вложения

  • program.exe.pdf
    113.9 KB · Просмотры: 11
Сергей, вы это вообще о чём?

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+.
 
Dragokas, запустил без изменений с calc.exe. Тайминги верные (да их и в переменных можно менять), но сами окна калькулятора не закрываются после 90 секунд работы. Можно подправить, чтобы они закрывались?
 
klaster, скорее всего вы запускаете код на системе Windows 8 или выше, а там calc.exe - это ланчер для процесса calculator.exe. Естественно, код об этом не знает и пытается закрыть calc.exe, которого уже не существует в списке процессов. В качестве ProcName нельзя указывать ланчер. Попробуйте заменить на notepad.exe, увидите, что работает нормально.
 
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. итд.
Есть ли возможность переписать программу под этот алгоритм?
Еще раз очень извиняюсь!
 
Ничего не понял.
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) закрывается.
Это же и делает мой бат. Или нет?
Ну, да, у меня ещё запускаются вспомогательные копии батника для слежения за каждым запущенным процессом, или это проблема?
 
Последнее редактирование:
Стоп, а если
после этого окно STARTER.BAT само закрывается.
то кто будет следить за запущенным процессом и закрывать его через 90 секунд, и запускать все остальные процессы?
 
Хм, как-же написать...
Первым идет STARTER.BAT, он запускает PROGRAM.EXE, после чего STARTER.BAT закрывается.
то кто будет следить за запущенным процессом и закрывать его через 90 секунд, и запускать все остальные процессы?
это должен делать новый BAT файл, который я без Вас написать не смогу.
 
А, я кажется понял. Сумасшедшая схема работы :Biggrin::Biggrin::Biggrin:
Зачем это всё нужно, если не секрет?
Сейчас попробую переписать.
 
Это же и делает мой бат. Или нет?
Между Вашим батником и моей программой должен быть мой батник, который и запускает программу. Получается, что ваш батник должен запустить (запускает) мой батник (который после вызова программы сам закроется), а после 90 секунд ваш батник должен закрыть программу.
 
Не обижайтесь, я просто тут уже ржу от смеха, то ли потому что не могу понять схему, то ли потому что она сложнее, чем можно было бы сделать.

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

Команда call bat.bat
 
klaster,
1. Ваш батник вызывается через call ?
2. Прототип команды запуска программы точно такой же как у меня?
3. Ваш батник возвращает управление? (должен заканчиваться на exit /b, goto :eof, или ничем, но не Exit)
 
УРА! Заработало!
В Ваш батник добавил строки из своего батника, поменял SetProcName на свою программу и все заработало так, как и нужно!
 
Последнее редактирование:
Назад
Сверху Снизу