2008-11-19 7 views
8

Je voudrais écrire un fichier batch qui vérifie si un processus est en cours d'exécution, et prend une action si c'est le cas, et une autre action si ce n'est pas le cas.A l'intérieur d'un fichier batch, comment savoir si un processus est en cours d'exécution?

Je sais que je peux utiliser liste des tâches pour lister tous les processus en cours, mais existe-t-il un moyen plus simple de vérifier directement un processus spécifique?

Il semble que cela devrait fonctionner, mais il ne fait pas:

tasklist /fi "imagename eq firefox.exe" /hn | MyTask 
IF %MyTask%=="" GOTO DO_NOTHING 
'do something here 
:DO_NOTHING 

En utilisant la solution fournie par atzz, voici une démo de travail complet:

Edit: simplifié et modifié pour fonctionner sous Windows XP et Vista à la fois

echo off 

set process_1="firefox.exe" 
set process_2="iexplore.exe" 
set ignore_result=INFO: 

for /f "usebackq" %%A in (`tasklist /nh /fi "imagename eq %process_1%"`) do if not %%A==%ignore_result% Exit 
for /f "usebackq" %%B in (`tasklist /nh /fi "imagename eq %process_2%"`) do if not %%B==%ignore_result% Exit 

start "C:\Program Files\Internet Explorer\iexplore.exe" www.google.com 

Répondre

6

Vous pouvez utiliser « pour/f » construire pour analyser la sortie du programme.

set running=0 
for /f "usebackq" %%T in (`tasklist /nh /fi "imagename eq firefox.exe"`) do set running=1 

En outre, il est une bonne idée de coller un

setlocal EnableExtensions 

au begginning de votre script, juste au cas où si l'utilisateur est-il désactivé par défaut.

+0

Nice one ... il y a tellement de gemmes cachées dans cmd.exe. – Kev

Questions connexes