Batch per Batch beenden

Gast #4667310
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.
#4668538
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 :)
Gast #4668618
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.
Gast #4668641
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
#4668694
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren