Как записать количество TaskList - PullRequest
0 голосов
/ 02 ноября 2018

У меня есть процесс под названием "Ulti.exe". Из-за требований моего проекта у меня одновременно работает несколько копий. Если количество копий «Ulti.exe» падает ниже 3, мне нужно убить все процессы и перезапустить их снова.

Как сохранить счетчик TaskList в переменной? В настоящее время используется следующая команда:

TaskList | FIND /C "Ulti.exe"

если набрать в cmd.exe вернет мне число процессов Ulti.exe точно. Как я могу включить это в файл .bat, чтобы я мог использовать этот номер в качестве переменной?

Ответы [ 2 ]

0 голосов
/ 02 ноября 2018

Во время подсчета вы также можете собрать PID, чтобы при необходимости убить их.

:: Q:\Test\2018\11\02\SO_53115422.cmd
@Echo off & SetLocal EnableExtensions EnableDelayedExpansion

Set "Prog=Ulti.exe"
::Set "Prog=firefox.exe"

Set "Count="
Set "PIDs="

for /f "tokens=2" %%A in (
    'TaskList /FI "IMAGENAME eq %Prog%" ^| Findstr /i "%Prog%"'
) do (
    Set /A Count+=1
    Set PIDs=!PIDs! /PID %%A
)

If defined Count (
    If !Count! lss 3 (
         echo taskkill %PIDs%
         echo restart %Prog%
    ) else (
        echo %Prog% running %Count% times [%PIDs%]
    )
) else (
    Echo %Prog% not running
    Echo start %Prog%
)

Пример вывода:

> SO_53115422
Ulti.exe running 5 times [ /PID 3664 /PID 10332 /PID 3544 /PID 8996 /PID 11192]

> SO_53115422
Ulti.exe not running
start Ulti.exe

> SO_53115422
taskkill  /PID 8056 /PID 2704
restart Ulti.exe

Команда taskkill отображается только во время тестирования

0 голосов
/ 02 ноября 2018

Получить вывод команды с циклом for /f:

for /f %%a in ('TaskList ^| FIND /I /C "Ulti.exe"') do set count=%%a
echo %count%
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...