Forum: PC-Programmierung Batch per Batch beenden


von gmt (Gast)


Lesenswert?

hi ich möchte mit einer batch eine andere batch starten und nach einer 
zeit NUR die gestartete batch schliessen. code sieht aktuell so aus:

start Messung.cmd
timeout /T %Messdauer%
Exit Messung.cmd

leider killt exit nicht die gestartete batch sonder sich selbst, was 
nicht sinn und zweck der sache ist.

von Tom (Gast)


Lesenswert?

Suchst Du taskkill statt exit?

von gmt (Gast)


Lesenswert?

taskkill killt mir auch nur das fenster in dem der befehl ausgeführt 
wird. ich will aber das andere fenster killen oder halt alle cmd 
fenster. lieber aber nur das eine

von Peter D. (peda)


Lesenswert?

Die 2. Batch legt eine Datei an.
Die 1. Batch prüft, ob die Datei existiert und beendet sich dann.

von Tek (Gast)


Lesenswert?

Du kannst mit
1
TITLE Name
 deinem Batch Fenster einen Namen geben,
1
TASKKILL /FI "WINDOWTITLE eq Name"
 beendet dann von zb. einem anderen Fenster aus das erste.

von Daniel A. (daniel-a)


Lesenswert?

Das sind mal wieder die wunderbaren Windows Batch hacks. Mit einer 
sauberen Bourne shell könnte man das so einfach und sauber lösen:
1
# Messdauer setzen
2
messdauer=5
3
4
# Messung starten & PID speichern
5
./Messung.cmd &
6
PID=$!
7
8
# Warten
9
sleep $messdauer
10
11
# Progrsamm beenden
12
kill $PID

Zu schade dass die Windowser keine Bourne shells benutzen, nicht dass 
sie nicht könnten, aber es ist ja nicht Vorinstalliert :)

von Tek (Gast)


Lesenswert?

@Daniel Abrecht (daniel-a)

Da hast Du teilweise recht, ich arbeite da auch gerne mit.

Aber die Windows Batch ist unterschätzt, wie ich einen Post über Dir 
geschrieben habe gibts da schon eine elegantere Lösung als das speichern 
der PID. Genauso wie scheinbar die wenigsten wissen das man auch in 
Windows Befehle mit | umleiten kann.

Ein
1
TASKLIST | FINDSTR
wäre auch eine Möglichkeit an die PID eines Prozesses zu kommen.

Gerade wenn man eben nur ein Windows mit Bordmitteln hat muss man darauf 
zurückgreifen.

http://ss64.com/nt/ ist ne nette übersicht.

von c.m. (Gast)


Lesenswert?

Tek schrieb:

> Gerade wenn man eben nur ein Windows mit Bordmitteln hat …

…sollte man cygwin installieren :)

von Tek (Gast)


Lesenswert?

c.m. schrieb:
> Tek schrieb:
>
>> Gerade wenn man eben nur ein Windows mit Bordmitteln hat …
>
> …sollte man cygwin installieren :)

Dann hat man aber kein Windwos mit Bordmitteln mehr... hab auch cygwin 
installiert, manchmal geht das aber halt net.
1
start "MessungXYZ" Messung.cmd
2
timeout /T %Messdauer%
3
TASKKILL /FI "WINDOWTITLE eq MessungXYZ*"

Nochmal etwas kompakter, das einzig unschöne ist das das Fenster dann 
den Titel "MessungXYZ - Messung.cmd" bekommt, darum der * im TASKKILL 
Filter

von Daniel A. (daniel-a)


Lesenswert?

Tek schrieb:
> Aber die Windows Batch ist unterschätzt, wie ich einen Post über Dir
> geschrieben habe gibts da schon eine elegantere Lösung als das speichern
> der PID. Genauso wie scheinbar die wenigsten wissen das man auch in
> Windows Befehle mit | umleiten kann.

Ich glaube du hast nicht erkannt worauf ich hinaus wollte. Es geht hier 
offensichtlich darum einen Prozess zu starten und später wieder zu 
Stoppen. Wärend man mit der Bash direckt eine PID bekommt, mit der man 
den Prozess eindeutig Identifizieren und Beenden kann, hat man in der 
Windows Batch keinen solchen Unique Identifier. Wenn man z.B. den Namen 
suchen muss, sei das mit "TASKLIST | FINDSTR" oder mit "TASKKILL /FI", 
der Name identifiziert die Anwendung nicht eindeutig. Auch wenn wohl 
niemand je ein Fenster/ein Prozess mit ebenfalls einem derartigem Namen 
erzeugen wird, ist dies dennoch ein möglicher Seiteneffekt, und genau 
deshalb bezeichne ich es als Unsauberen Windows Hack, denn der Code muss 
nicht immer nur das tun, was er tun soll.

Falls es tatsächlich eine elegantere Lösung gibt, die den zu beendenden 
Prozess eindeutig identifizieren kann, lerne ich natürlich gerne dazu.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.