Wie mache ich dass eine Batch eine bestimmte Aktion macht, wenn ein bestimmter Task gerade läuft?

2 Antworten

Du kannst dir mit tasklist alle Prozesse ausgeben lassen, die aktuell ausgeführt werden. Du kannst dabei mit /FI ähnlich wie bei taskkill filtern. Dann musst du überprüfen, ob die Ausgabe leer ist (also z.B. "INFORMATION: Es werden keine Aufgaben mit den angegebenen Kriterien ausgeführt." angezeigt wird.), oder ob dein Prozess ausgeführt wird.

Oftmals genügt es allerdings die allgemeine (oder per /svc um Dienste erweiterte) Ausgabe von tasklist mithilfe von z.B. find zu durchsuchen, da du in diesem Fall einen errorlevel bekommst. Folgender Code überprüft z.B. ob Chrome ausgeführt wird:

@tasklist/nh | find/i "chrome.exe">nul &&(
    echo.Task wird ausgefuehrt
) || (
    echo.Task wird nicht ausgefuehrt
)
pause

Erzesel  02.03.2020, 21:22

Ist nichts zu meckern.

Ich hätte allerdings auf ImageName oder WindowTitle gefiltert. Auf diese Weise muss Tasklist nicht alle Programme durchhecheln.

Da auf einem Rechner Auch andere Nutzer Angemeldet sein können wäre es blöd wenn ein Programm als "laufend" gemeldet wird mit welchem der Nutze garnichts am Hut hat, deshalb der Filter, welch nur die Prozesse des anfragenden Nutzers UserName bewertet. Prozesse anderer Nutzer bleiben unbeachtet.

@echo off
  rem Umlaute anzeigen
chcp 65001 >nul  

  rem  hier Program angeben
set "myProgram=chrome.exe"

  rem Nur Prozesse , welche vom aktuellen Nutzerprofil ausgeführt werden  
tasklist /nh /fi "UserName eq %UserName%" /fi "ImageName eq %myProgram%" | find /i "%myProgram%">nul &&(
    echo.Task wird ausgeführt
) || (
    echo.Task wird nicht ausgeführt
)
pause
1