2014-10-24 8 views
8

Ich möchte eine einfache Batch-Datei schreiben, um einen Prozess zu beenden, der bestimmten Text im Fenstertitel enthält. Im Moment habe ich:Windows Batch-Datei - Taskkill, wenn der Fenstertitel Text enthält

taskkill /fi "Windowtitle eq XXXX*" /im cmd.exe 

Und das funktioniert, außer, was ich will ist tun, um die Platzhalter verwenden sowohl am Anfang und Ende des Titels. So etwas wie:

taskkill /fi "Windowtitle eq \*X*" /im cmd.exe 

Aber ich habe das versucht und es funktioniert nicht. Gibt es etwas, was ich vermisse oder ist das nicht möglich?

Antwort

5

Nein, Platzhalter sind zu Beginn des Filters nicht zulässig.

for /f "tokens=2 delims=," %%a in (' 
    tasklist /fi "imagename eq cmd.exe" /v /fo:csv /nh 
    ^| findstr /r /c:".*X[^,]*$" 
') do taskkill /pid %%a 

Dies wird die Liste der Aufgaben, in csv und ausführlichem Format (das schließt Fenstertitel als das letzte Feld in der Ausgabe) abgerufen werden. Die Liste wird nach findstr mit einem regulären Ausdruck gefiltert, der den angegebenen Text (X) im letzten Feld durchsucht.

Wenn eine Zeile mit dem Filter übereinstimmt, wird sie mit dem Token for in das zweite Feld (die PID) geschrieben, das in taskkill verwendet wird, um den Prozess zu beenden.

+0

Nach Stunden suchen, ist dies bei weitem die beste Methode da draußen! Danke, MC ND! – Acidon

4

Im speziellen Fall, dass Sie das Befehlsfenster aus einer Batch-Datei selbst gestartet haben, können Sie den Fenstertitel angeben mit dem Befehl

START MyWindowTitle c:/MyProcess.exe 

Auf diese Weise ist es einfach, den Prozess wieder nur

mit töten
taskkill /fi "WindowTitle eq MyWindowTitle" 
+0

Schön! das funktioniert. Hinweis: Wenn Ihr Titel "Administrator:" vor hat, finden Sie diese Antwort hier: http://stackoverflow.com/questions/10948235/taskkill-window-spaces-in-its-title-name – Marc

+0

Perfektes und einfaches Beispiel . Vielen Dank –