Usando lote para verificar se um processo está em execução com WMIC

Usando lote para verificar se um processo está em execução com WMIC

Estou tentando escrever um script que verifique se um processo está em execução (no meu caso, uma máquina virtual)

@echo off
wmic process where name="VirtualBox.exe" | find "GitHubEnterprise" /c > tmpcount
set /p count= < tmpcount
echo Number of instances = %count%

Fazer isso me permite ver se minha instância do GitHub está em execução ou não, mas exige que eu seja capaz de gravar a saída de find em um arquivo, lê-lo novamente e excluir o arquivo. (Deve-se observar que há duas cópias do VirtualBox.exe em execução a qualquer momento, portanto, estou tentando verificar se a instância do GitHubEnterprise está em execução).

O que eu gostaria de fazer é armazenar esse número de contagem encontrado diretamente em uma variável ou usá-lo em alguma forma de instrução if.

Agora, em minha própria pesquisa sobre isso, vi muitas sugestões de uso de um forloop para isso e tentei da seguinte maneira, sem sucesso:

@echo off
setlocal enableextensions
for /f "tokens=*" %%a in (
'wmic process where "name='VirtualBox.exe'" ^| find "GitHubEnterprise" /c'
) do ( 
@set count = %a
)
echo Number of instances = %count%
pause
endlocal

Alguém pode ver/me dizer o que estou fazendo de errado aqui ou fazer uma sugestão para fazer isso melhor.

Obrigado a todos, tenham um ótimo dia.

JD

Responder1

Tente usar SETX,

Definir variáveis ​​de ambiente,SETXpode ser usado para definir variáveis ​​de ambiente para a máquina (HKLM) ou usuário atualmente conectado (HKCU):

Defina a variável _my_count como '5' no ambiente de usuários:

SetX _minha_contagem 5

então leia a variável de ambiente mais tarde ...

SE "%_my_count%" == "" VAI FAZER ISSO

outra forma seria usar o registro e o comando REG.

informação relacionada