Usando lote para verificar se um processo está sendo executado com o WMIC

0

Estou tentando escrever um script que verificará 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%

Portanto, isso permite que eu veja se minha instância do GitHub está em execução ou não, mas é necessário que eu escreva a saída do find em um arquivo e, em seguida, leia-o novamente e exclua o arquivo. (Deve-se notar que há duas cópias do VirtualBox.exe em execução a qualquer momento, por isso 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 do resultado diretamente em uma variável ou usá-lo em alguma forma de uma instrução if.

Agora, a partir de minha própria pesquisa sobre isso, eu já vi muitas sugestões de usar um loop for 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 incorretamente aqui ou fazer uma sugestão para fazer isso melhor.

Obrigado a todos, tenham um ótimo dia.

JD

    
por JDD 10.07.2014 / 21:43

1 resposta

0

Tente usar o SETX,

Defina as variáveis de ambiente, SETX pode ser usado para definir as variáveis de ambiente da máquina (HKLM ) ou usuário atualmente conectado (HKCU):

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

SetX _my_count 5

leia a variável de ambiente mais tarde ...

IF "%_my_count%" == "" GOTO DOTHIS

outra forma seria usar o registro e o comando REG.

    
por 11.07.2014 / 01:16