I como o WMIC
e TASKLIST
ferramentas, mas eles não estão disponíveis na home / edições básicas de windows.Another maneira é usar QPROCESS
comandos disponíveis em quase todos os máquina Windows (para os que têm serviços de terminal - Eu acho que só tem a ganhar XP sem SP2, assim practialy cada máquina de janelas):
@echo off
:check_process
setlocal
if "%~1" equ "" echo pass the process name as forst argument && exit /b 1
:: first argument is the process you want to check if running
set process_to_check=%~1
:: QPROCESS can display only the first 12 symbols of the running process
:: If other tool is used the line bellow could be deleted
set process_to_check=%process_to_check:~0,12%
QPROCESS * | find /i "%process_to_check%" >nul 2>&1 && (
echo process %process_to_check% is running
) || (
echo process %process_to_check% is not running
)
endlocal
QPROCESS
O comando não é tão poderoso quanto TASKLIST
é limitado e mostra apenas 12 símbolos do nome do processo, mas deve ser levado em consideração se TASKLIST
não estiver disponível.
Uso mais simples em que ele usa o nome se o processo como argumento (o .exe
sufixo é obrigatório neste caso em que você passa o nome do executável):
@echo off
:check_process
setlocal
if "%~1" equ "" echo pass the process name as forst argument && exit /b 1
:: first argument is the process you want to check if running
:: .exe suffix is mandatory
set "process_to_check=%~1"
QPROCESS "%process_to_check%" >nul 2>&1 && (
echo process %process_to_check% is running
) || (
echo process %process_to_check% is not running
)
endlocal
A diferença entre duas formas de QPROCESS
uso é que QPROCESS *
listará todos os processos e QPROCESS some.exe
filtrará apenas os processos para o usuário atual.
Usar WMI
objetos através do Windows Script Host Exe em vez de WMIC
também é uma opção. Ele deve ser executado também em todas as máquinas Windows (excluindo aquelas em que o WSH está desativado, mas este é um caso raro) .Aqui está o arquivo bat que lista todos os processos através do WMI classes e pode ser usado no lugar do QPROCESS
script acima (é um híbrido jscript / bat e deve ser salvo como .bat
):
@if (@X)==(@Y) @end /* JSCRIPT COMMENT **
@echo off
cscript //E:JScript //nologo "%~f0"
exit /b
************** end of JSCRIPT COMMENT **/
var winmgmts = GetObject("winmgmts:\\\\.\\root\\cimv2");
var colProcess = winmgmts.ExecQuery("Select * from Win32_Process");
var processes = new Enumerator(colProcess);
for (;!processes.atEnd();processes.moveNext()) {
var process=processes.item();
WScript.Echo( process.processID + " " + process.Name );
}
E uma modificação que verificará se um processo está em execução:
@if (@X)==(@Y) @end /* JSCRIPT COMMENT **
@echo off
if "%~1" equ "" echo pass the process name as forst argument && exit /b 1
:: first argument is the process you want to check if running
set process_to_check=%~1
cscript //E:JScript //nologo "%~f0" | find /i "%process_to_check%" >nul 2>&1 && (
echo process %process_to_check% is running
) || (
echo process %process_to_check% is not running
)
exit /b
************** end of JSCRIPT COMMENT **/
var winmgmts = GetObject("winmgmts:\\\\.\\root\\cimv2");
var colProcess = winmgmts.ExecQuery("Select * from Win32_Process");
var processes = new Enumerator(colProcess);
for (;!processes.atEnd();processes.moveNext()) {
var process=processes.item();
WScript.Echo( process.processID + " " + process.Name );
}
As duas opções podem ser usadas em máquinas que não possuem TASKLIST
.
A técnica final está usando MSHTA
. Isso será executado em todas as máquinas Windows a partir do XP e acima e não depende das configurações do host de scripts do Windows. a chamada de MSHTA
poderia reduzir um pouco o desempenho (novamente deve ser salvo como bastão):
@if (@X)==(@Y) @end /* JSCRIPT COMMENT **
@echo off
setlocal
if "%~1" equ "" echo pass the process name as forst argument && exit /b 1
:: first argument is the process you want to check if running
set process_to_check=%~1
mshta "about:<script language='javascript' src='file://%~dpnxf0'></script>" | find /i "%process_to_check%" >nul 2>&1 && (
echo process %process_to_check% is running
) || (
echo process %process_to_check% is not running
)
endlocal
exit /b
************** end of JSCRIPT COMMENT **/
var fso= new ActiveXObject('Scripting.FileSystemObject').GetStandardStream(1);
var winmgmts = GetObject("winmgmts:\\\\.\\root\\cimv2");
var colProcess = winmgmts.ExecQuery("Select * from Win32_Process");
var processes = new Enumerator(colProcess);
for (;!processes.atEnd();processes.moveNext()) {
var process=processes.item();
fso.Write( process.processID + " " + process.Name + "\n");
}
close();