taskkill - termine les tâches dont le titre de la fenêtre se termine par une chaîne spécifique

5

Je dois écrire un programme batch pour mettre fin à toutes les tâches du communicateur MS Office avec les titres de fenêtre (se terminant généralement par le motif "- Conversation").

j'ai essayé

taskkill / FI "WINDOWTITLE eq * Conversation" / communicateur IM

mais le modèle générique commençant par '*' ne semble pas fonctionner. Donne l'erreur suivante

ERREUR: le filtre de recherche ne peut pas être reconnu.

toute suggestion pour une solution de contournement serait grandement appréciée!

dbza
la source
1
'*' Ne peut pas fonctionner au début du texte filtré
Ofiris

Réponses:

2

Voici un fichier de commandes partiellement inspiré par cette question par Rogier:

@echo off

for /F "delims=" %%a in ('tasklist /fo list /v') do (
      call :Sub %%a
)
exit /b

:Sub
set Line=%*
set BOL4=%Line:~0,4%
set BOL13=%Line:~0,13%
set Value=%Line:~14%
if "%BOL4%"=="PID:" (
      set save_PID=%Value%
      exit /b
)
if "%BOL13%"=="Window Title:" ( // Remarque . au dessous de.
      echo %Value% | findstr /r /c:"- Conversation.$" > nul
      if not errorlevel 1 (
            echo %save_PID%
            REM taskkill /pid %save_PID%
      )
      exit /b
)
exit /b

J'ai trouvé que je devais ajouter un . à la fin de l'expression régulière pour la

echo chaîne | findstr /r expression régulière se terminant par $

forme pour travailler. Je devine que echo ajoute un CR ou peut-être un CRLF supplémentaire au chaîne , et cela findstr compte cela comme un caractère apparaissant entre la chaîne et la fin de la ligne.

Évidemment, vous allez commenter la taskkill commandez celui que vous avez testé.

Scott
la source
3

J'apprécie la réponse de fichier batch qui utilise une commande FOR.

Voici une autre méthode, présentée ici simplement comme une option supplémentaire. L'approche est assez différente de l'autre réponse fournie.

Tout d’abord, voyez si vous pouvez trouver les processus MS Communicator avec WMIC. par exemple.:

LISTE DE PROCESSUS WMIC COMPLET

Ou, pour afficher les informations horizontalement dans un tableau plutôt que verticalement dans le format Propriété = Valeur, procédez comme suit:

LISTE DE PROCESSUS WMIC COMPLET / FORMAT: TABLE

ou peut-être, pour limiter cela:

PROCESSUS WMIC OBTENIR UN NOM / FORMAT: TABLE

(et ignorer la première ligne)

Cela ne semble pas afficher le titre de la fenêtre, mais peut contenir de nombreuses autres informations pouvant être utilisées pour identifier de manière unique les instances de Communicator, telles que les noms des exécutables.

Ensuite, vous pouvez commencer à devenir plus agressif, en réduisant vos conclusions. Ce qui suit recherche les instances qui se terminent par "name.exe" (par exemple, "filename.exe", "myname.exe")

WMIC PROCESS WHERE "Description comme '%% name.exe'" LIST FULL / FORMAT: TABLE

Tout cela n'était que de la recherche pour affiner votre commande. (Après tout, vous ne voulez pas vraiment commencer à mettre fin aux mauvais processus.)

Enfin, une fois que toutes vos recherches sont terminées, vous savez donc que vous pouvez répertorier tout ce que vous souhaitez terminer, puis commencer à tuer.

WMIC PROCESS WHERE "Description comme '%% name.exe'" DELETE

La partie la plus intéressante de cette méthode est que vous trouvez rapidement des moyens de collecter de nombreuses informations pouvant être utilisées pour l’automatisation.

TOOGAM
la source
Cela a fait le tour pour moi.
John Livermore