2014-10-24 22 views
8

Voglio scrivere un semplice file batch per terminare un processo che contiene un determinato testo nel titolo della finestra. In questo momento ho:File batch di Windows - taskkill se il titolo della finestra contiene il testo

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

e che funziona, tranne quello che voglio fare è utilizzare il carattere jolly sia all'inizio e alla fine del titolo. Quindi qualcosa tipo:

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

Ma ho provato questo e non funziona. C'è qualcosa che mi manca o non è possibile?

risposta

5

No, i caratteri jolly non sono consentiti all'inizio del filtro.

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 

Questo sarà recuperare l'elenco delle attività, in formato CSV e il formato verbose (che includerà titolo della finestra come l'ultimo campo in uscita).

L'elenco viene filtrato da findstr con un'espressione regolare che cercherà il testo indicato (X) nell'ultimo campo.

Se una qualsiasi riga corrisponde al filtro, lo for la tokenizza, recuperando il secondo campo (il PID) che verrà utilizzato in taskkill per terminare il processo.

+0

Dopo aver cercato per ore, questo è di gran lunga il miglior metodo là fuori! Grazie, MC ND! – Acidon

4

Nel caso particolare che avete iniziato la finestra di comando da un file batch da soli, è possibile specificare il titolo della finestra utilizzando il comando

START MyWindowTitle c:/MyProcess.exe 

In questo modo è facile uccidere il processo ancora una volta utilizzando solo

taskkill /fi "WindowTitle eq MyWindowTitle" 
+0

Bello! questo funziona Nota: se il titolo ha "Amministratore:" in primo piano, vedere questa risposta qui: http://stackoverflow.com/questions/10948235/taskkill-window-spaces-in-its-title-name – Marc

+0

Esempio perfetto e semplice . Grazie –