2008-11-19 6 views
8

Ich möchte eine Batch-Datei schreiben, die überprüft, ob ein Prozess ausgeführt wird, und eine Aktion, wenn dies der Fall ist, und eine andere Aktion, wenn dies nicht der Fall ist.Wie kann ich in einer Batchdatei feststellen, ob ein Prozess ausgeführt wird?

Ich weiß, ich kann Tasklist verwenden, um alle laufenden Prozesse aufzulisten, aber gibt es eine einfachere Möglichkeit, einen bestimmten Prozess direkt zu überprüfen?

Es scheint, wie das funktionieren sollte, aber es funktioniert nicht:

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

die Lösung von atzz mit Hilfe des mitgelieferten hier ist eine komplette Arbeits Demo:

Edit: Vereinfachte und beide WinXP und Vista geändert unter

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 

Antwort

6

Sie können "for/f" Konstrukt verwenden, um Programmausgaben zu analysieren.

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

Außerdem ist es eine gute Idee, ein

setlocal EnableExtensions 

am begginning des Skripts zu halten, für den Fall, wenn der Benutzer es standardmäßig deaktiviert.

+0

Schöne ... es gibt so viele versteckte Edelsteine ​​in cmd.exe. – Kev