Prüfen ob eine Batch Datei läuft mit einer anderen Batch?
Wie kann man in einer Batch-Datei überprüfen, ob eine andere Batch (.bat) läuft?
2 Antworten
Die einfachste Variante wäre mit title in der ersten Batch dem Fenster einen unverkennbaren Namen zu geben.
@Echo öffnete
title rubbeldiekatz
Echo hallo ich soll gefunden werden....
pause
Nun prüfst du mit der zweiten Batch ob das Fenster mit dem Namen rubbeldiekatz in der Taskliste erscheint...
@echo off
tasklist /nh /fi "Windowtitle eq rubbeldiekatz" | find "cmd.exe"
if %errorlevel% equ 0 (
echo Batch mit dem Titel rubbeldiekatz wird ausgeführt.
) else (
echo Batch mit dem Titel rubbeldiekatz wird nicht ausgeführt.
)
pause
So in etwa sollte es funktionieren. Leider kann ich nicht testen, da ich die Batches nur aus der Hüfte auf dem Handy geschrieben habe.
tasklist /nh /fi "Windowtitle eq rubbeldiekatz"
Sollte in jedem Fall cmd..exe ausgeben und find filter alle Zeilen mit cmd.exe...
@echo off
for "tokens=*" %%a in ('tasklist /nh /fi "Windowtitle eq rubbeldiekatz" ^| find "cmd.exe" ') do (
rem zum testen, kann weg...
echo bla und blubb %%a
echo rubbeldiekatz laeuft
goto :break
)
Rem wird nur gezeigt wenn kein cmd.exe in der Schleife erscheint...
echo laeuft nicht
:break
pause
Wie gesagt, ohne Gewähr ...ungetestet.
Man kann per Batch abfragen, welche Prozesse laufen. Auch, ob ein Prozess mit einem bestimmten Namen und wahrscheinlich auch Startparametern läuft.
Eine Batch-Datei wird von cmd.exe ausgeführt, danach müsste man also suchen können.
(Hab leider gerade keinen Computer griffbereit, um nachzusehen.)
wmic process get
...liefert für jeden laufenden Prozess folgenden Record (Hashtable/etc) zurück:
- CreationClassName;
- Caption;
- CommandLine;
- CreationDate;
- CSCreationClassName;
- CSName;
- Description;
- ExecutablePath;
- ExecutionState;
- Handle;
- HandleCount;
- InstallDate;
- KernelModeTime;
- MaximumWorkingSetSize;
- MinimumWorkingSetSize;
- Name;
- OSCreationClassName;
- OSName;
- OperationCount;
- OtherTransferCount;
- PageFaults;
- PageFileUsage;
- ParentProcessId;
- PeakPageFileUsage;
- PeakVirtualSize;
- PeakWorkingSetSize;
- Priority
- PrivatePageCount;
- ProcessId;
- QuotaNonPagedPoolUsage;
- uint32 QuotaPagedPoolUsage;
- QuotaPeakNonPagedPoolUsage;
- QuotaPeakPagedPoolUsage;
- ReadOperationCount;
- ReadTransferCount;
- SessionId;
- Status;
- TerminationDate;
- ThreadCount;
- UserModeTime;
- VirtualSize;
- WindowsVersion;
- WorkingSetSize;
- WriteOperationCount;
- WriteTransferCount;
...das dumme, nicht den Fenstertitel. Da kommt man leider nicht um Tasklist herum. Durch geschicktes kombinieren von Tasklist und Wmi- abfragen kann man nach so ziemlich allem Filtern...