J'aime les outils WMIC
et TASKLIST
, mais ils ne sont pas disponibles dans les éditions home / basic de windows.Une autre façon est d'utiliser la QPROCESS
commande disponible sur presque toutes les machines Windows (pour celles qui ont des services terminaux - je pense que gagner XP sans SP2, donc pratiquement tous les machine Windows):
@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
La commande n'est pas aussi puissante TASKLIST
et est limitée à ne montrer que 12 symboles du nom du processus mais doit être prise en compte si elle TASKLIST
n'est pas disponible.
Utilisation plus simple où il utilise le nom si le processus comme argument (le .exe
suffixe est obligatoire dans ce cas où vous passez le nom de l'exécutable):
@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
La différence entre deux modes d' QPROCESS
utilisation est que le QPROCESS *
listera tous les processus alors qu'il QPROCESS some.exe
ne filtrera que les processus pour l'utilisateur actuel.
Il est également possible d'utiliser des WMI
objets via Windows Script Host WMIC
Exe au lieu de.Il devrait également être exécuté sur toutes les machines Windows (à l'exception de celles où le WSH est désactivé, mais c'est un cas rare). et peut être utilisé à la place du QPROCESS
script ci-dessus (il s'agit d'un hybride jscript / bat et doit être enregistré sous .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 );
}
Et une modification qui vérifiera si un processus est en cours d'exécution:
@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 );
}
Les deux options pourraient être utilisées sur des machines qui n'en ont pas TASKLIST
.
La technique ultime utilise MSHTA
. Cela s'exécutera sur toutes les machines Windows à partir de XP et au-dessus et ne dépend pas des paramètres d'hôte du script Windows. l'appel de MSHTA
pourrait cependant réduire un peu les performances (encore une fois, il devrait être enregistré en tant que batte):
@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();