A melhor maneira que encontrei para fazer isso é definir o título em um script em lote.
A partir daí, você pode usar a lista de tarefas para consultar a contagem de processos em execução pelo nome do título. O trecho abaixo do código abaixo de process_count = 2 significa que o processo não está em execução, 3 significa que exatamente 1 instância está em execução e, se acima de 3, há mais de 3 processos em execução.
Hackish, mas o lote é o que é.
Para um script contínuo de Looping, não sou inteligente o suficiente para pensar em uma maneira de escrever a hora de início no campo de título e consultá-lo em outro script de lote. Eu pensei em copiar e renomear o nome do arquivo com o tempo, em seguida, executar isso, mas para mim, qualquer coisa, mas uma consulta direta é mais confusão do que vale a pena.
Sim, posso usar o arquivo de texto, mas estou preocupado com a corrupção do cache.
@REM ########################
:COUNT_PROCESS_INSTANCES
@REM @@@@@@@@@@@@@@@@@@@@@@@@
SET /A PROCESS_COUNTER=0
@REM No way to inject a counter into this for statement.
FOR /F "DELIMS=" %%A in ('tasklist /FI "WINDOWTITLE EQ %USERNAME%: %PROCESS_NAME_TO_COUNT%*"') do (CALL :SUB_INCRIMENT_PROCESS_COUNTER)
@REM If one instance is running, or no instances, that's fine. If more than one instance is running, time to exterminate.
@ECHO PROCESS COUNTER IS: "%PROCESS_COUNTER%"
SET PROCESS_NAME_TO_COUNT=NULL
GOTO :EOF
:SUB_INCRIMENT_PROCESS_COUNTER
SET /A PROCESS_COUNTER=%PROCESS_COUNTER%+1
GOTO :EOF
@REM @@@@@@@@@@@@@@@@@@@@@@@@
@REM ########################
Além disso, para qualquer pessoa interessada; aqui está como encontrar o PID do processo atualmente em execução. Agora, se você passar uma variável para um sub-script, poderá passar essa variável de volta à cadeia por meio de um documento de texto (acho que há outra maneira de fazer isso também, mas isso me escapa).
@REM @@@@@@@@@@@@@@@@@@@@@@@@
:FIND_SELF_PID
@REM ########################
@REM Leaving this here for later if needed. This was a byproduct of a bad approach.
FOR /F "TOKENS=1,2,*" %%A in ('tasklist /FI "WINDOWTITLE EQ %USERNAME%: %CURRENT_TITLE%"') do (SET SELF_PID=%%B)
echo %self_pid%
GOTO :EOF
@REM @@@@@@@@@@@@@@@@@@@@@@@@
@REM ########################