2016-05-26 4 views
0

Ich muss eine Windows-Batchdatei (* .bat) erstellen, die nur ihre Befehle ausführt, wenn bestimmte Prozesse (und Batchdateien) NICHT ausgeführt werden.Warte auf das Schließen einer BAT-Datei in einer Windows-Batch-Datei

Ich habe an einer Lösung gesucht, die hier für die Prozesse (* .exe) funktioniert: How to wait for a process to terminate to execute another process in batch file

Ich möchte jedoch etwas sehr ähnlich, tun, gibt es eine Schwierigkeit: Batch-Dateien zeigen sich als „cmd. exe "im Befehl" TASKLIST ".

Ich möchte überprüfen, ob eine bestimmte Bat-Datei ausgeführt wird, zum Beispiel: "C: \ mybatch.bat", und wenn ja, warten Sie, bis es geschlossen ist.

+0

'tasklist/v' gibt den Fenstertitel. Es ist, als wäre es der Fenstertitel - cmd ändert den Titel nicht. –

Antwort

0

Überprüfen, ob eine bestimmte Fledermaus-Datei mybatch.bat läuft könnte eine härtere Aufgabe als es auf den ersten Blick aussehen könnte.

der Suche nach einem bestimmten Fenstertitel in tasklist /V sowie Prüfung CommandLine Eigenschaft in wmic process where "name='cmd.exe'" get CommandLinekönnte unter einem denkbaren Umständen scheitern.

1st. Können Sie

  • hinzufügen title ThisIsDistinguishingString Befehl am Anfang der mybatch.batund
  • Entfernen Sie alle anderen title Befehle von mybatch.batund
  • sicherzustellen, dass mybatch.batnicht Anruf eine andere Batch-Skript (n) enthält, ein title Befehl?

Dann überprüfen errorlevel von find command zurück wie folgt:

:testMybatch 
tasklist /V /FI "imagename eq cmd.exe" | find "ThisIsDistinguishingString" > nul 
if errorlevel 1 (
    rem echo mybatch.bat batch not found 
) else (
    echo mybatch.bat is running %date% %time% 
    timeout /T 10 /NOBREAK >NUL 2>&1 
    goto :testMybatch 
) 

2..Andernfalls überprüfen, ob wmic Windows Management Instrumentation command Ausgang

helfen könnte
wmic process where "name='cmd.exe'" get /value 

Dann könnten Sie mybatch.bat in seine Ausgabe an

wmic process where "name='cmd.exe'" get CommandLine, ProcessID 

Hinweis verengte erkennen, dass wmic einige Win32_Process class Eigenschaften zurückkehren konnten, vor allem CommandLine, leer wenn eine bestimmte Prozess wurde unter einem anderen Benutzerkonto gestartet oder erhöht (als Administrator ausgeführt).
Erhöht wmic gibt alle Eigenschaften vollständig zurück.

+0

Danke. Deine Lösung ist gut für meine Bedürfnisse. – zaidgs

0

Was Sie sagen, geschieht standardmäßig.

Um zu testen, Kiste eine neue BAT-Datei (sagen wir mal 1.bat) und

calc

mspaint

Speichern in sie und ausführen. Rechner wird gestartet. Sie werden feststellen, dass Paitbrush nur gestartet wird, wenn Sie den Rechner geschlossen haben.

+0

Sie haben meine Frage falsch verstanden. Die Batch-Datei, die ich überprüfen muss, ob sie ausgeführt wird, wird außerhalb/vor der Batch-Datei ausgeführt, die ich schreiben muss. – zaidgs

Verwandte Themen