peter32
Goto Top

Komplexe (möchst Batch)-Aufgabe programmierbar?

Hallo liebe Administratoren,

ich hoffe, ihr könnt mir bei folgender Problematik weiterhelfen - möglichst per Batch - wenn es geht face-smile

Zuerst soll eine EXE-Datei ausgeführt werden (EXE-DATEI), die Projekt1 öffnet.
Wenn diese EXE-DATEI mit Projektname1 geschlossen ist und nicht ein neues fenster mit derselben EXE-DATEI öffnet. Dann soll dieselbe EXE-DATEI ausgeführt werden mit Projektname2. usw.

Bisher sieht mein Batch-Code so aus:

@echo off
cd "C:\program files (x86)\Programm\"
EXE-DATEI.exe "C:\Users\user1\Documents\projektname1"
EXE-DATEI.exe "C:\Users\user1\Documents\projektname2"
EXE-DATEI.exe "C:\Users\user1\Documents\projektname3"
EXE-DATEI.exe "C:\Users\user1\Documents\projektname4"
EXE-DATEI.exe "C:\Users\user1\Documents\projektname5"

Die Batch datei öffnet brav EXE-DATEI.exe mit projektname1 und führt dieses projekt aus, bis es sich selbstständig schließt.
Dann öffnet die Batch datei EXE-DATEI.exe mit projektname2 und führt dieses projekt aus, bis es sich wieder selbstständig schließt..
usw.

An sich ist das genau das was ich will - das Problem: Manchmal startet sich das Projekt selbstständig sogar mehrere male neu! Bevor dieses Projekt nicht vollständig abgeschlossen ist, soll aber nicht schon mit dem nächsten Projekt fortgefahren werden!

Mein Ziel ist, dass die Batch-Datei nicht direkt mit projektname2 fortfahren soll, sondern kurz warten soll und überprüfen soll, ob nicht projektname1 sich zwar geschlossen, aber selbstständig neugestartet hat! Das passiert leider manchmal mehrere male und muss mitberücksichtigt werden. Leider öffnet projektname1 zwar die EXE-DATEI, aber nirgends sind informationen vorhanden, dass es sich hierbei um projektname1, 2 oder 3 usw. handelt. Es öffnet lediglich die EXE-DATEI.

Nochmal etwas anders:
Meine Idee ist (skizzenmäßig) folgende:

@echo off
cd "C:\program files (x86)\Programm\"
EXE-DATEI.exe "C:\Users\user1\Documents\projektname1"

WENN projektname1 nicht direkt (innerhalb weniger Sekunden) die EXE-DATEI wieder öffnet im neuen Fenster, DANN fahre fort zur nächsten Zeile, SONST warte bis sich dieses neu geöffnete fenster wieder schließt.
Fahre normal fort.

EXE-DATEI.exe "C:\Users\user1\Documents\projektname2"

WENN projektname2 nicht direkt (innerhalb weniger Sekunden) die EXE-DATEI wieder öffnet im neuen Fenster, DANN fahre fort zur nächsten Zeile, SONST warte bis sich dieses neu geöffnete fenster wieder schließt.
Fahre normal fort.

EXE-DATEI.exe "C:\Users\user1\Documents\projektname3"

WENN projektname3 nicht direkt (innerhalb weniger Sekunden) die EXE-DATEI wieder öffnet im neuen Fenster, DANN fahre fort zur nächsten Zeile, SONST warte bis sich dieses neu geöffnete fenster wieder schließt.
Fahre normal fort.

EXE-DATEI.exe "C:\Users\user1\Documents\projektname4"

WENN projektname4 nicht direkt (innerhalb weniger Sekunden) die EXE-DATEI wieder öffnet im neuen Fenster, DANN fahre fort zur nächsten Zeile, SONST warte bis sich dieses neu geöffnete fenster wieder schließt.
Fahre normal fort.

EXE-DATEI.exe "C:\Users\user1\Documents\projektname5"

USW


Hat jemand eine Idee? face-smile

LG
Peter

Content-Key: 265799

Url: https://administrator.de/contentid/265799

Printed on: April 24, 2024 at 01:04 o'clock

Member: rubberman
Solution rubberman Mar 10, 2015, updated at Mar 11, 2015 at 12:14:28 (UTC)
Goto Top
Hallo Peter,

ungetestet etwa so:
@echo off &setlocal
REM Wartezeit für den Fall dass das Programm erneut selbständig startet
set /a "suspend=3"  
REM Programmdatei
set "exefile=EXE-DATEI.exe"  
REM Programmpfad
cd /d "%PROGRAMFILES(x86)%\Programm"  
REM Schleife mit den Projekten (in Anführungszeichen eingeschlossen)
for %%i in (
  "projektname1"  
  "projektname2"  
  "projektname3"  
  "projektname4"  
  "projektname5"  
) do (
  REM Programm asynchron starten
  start "" "%exefile%" "%userprofile%\Documents\%%~i"  
  REM Überwachung aufrufen
  call :wait
)
REM Batchende
exit /b


REM Subroutine für die Programmüberwachung
:wait
>nul timeout /t 1 /nobreak
tasklist /nh /fi "imagename eq %exefile%" | findstr /bic:"%exefile% " >nul && (  
  goto wait
) || (
  >nul timeout /t %suspend% /nobreak
  tasklist /nh /fi "imagename eq %exefile%" | findstr /bic:"%exefile% " >nul && goto wait  
)
exit /b
Grüße
rubberman
Member: Peter32
Peter32 Mar 11, 2015 at 12:14:36 (UTC)
Goto Top
Danke!