Passa os PIDs da lista de tarefas e mata os processos com a lista de tarefas

2

Isso está relacionado ao meu tópico Passa o PID da tasklist para o taskkill para matar um processo pelos .dlls que estão sendo abertos .

Estou tentando fazer algo parecido com o que foi discutido nesse tópico:

FOR /F "usebackq tokens=2 skip=2" %i IN ('tasklist |findstr /r "[0-9].exe") DO taskkill /PID %i

O comando acima não é executado. Eu quero pegar todos os processos que são como 123456.exe e matá-los. O que estou fazendo errado?

    
por Guiness 15.03.2012 / 01:24

1 resposta

2

Você precisará fazer algumas alterações para que funcione. Este exemplo como você deseja:

FOR /F "usebackq tokens=1-2" %i IN ('tasklist ^|findstr /b "[0-9]"') DO taskkill /PID %j

Seu código:

FOR /F "usebackq tokens=2 skip=2" %i IN ('tasklist |findstr /r "[0-9].exe") DO taskkill /PID %i

Por que seu código falhou:

  • Em tempo de execução, a diretiva skip = 2 pulará seus dois primeiros resultados.
  • A saída do Tasklist.exe tem várias colunas. Findstr.exe atua na primeira coluna, mas o Taskkill.exe usa o segundo. Sem incluir os dois, o Taskkill.exe não tem pid para agir.
  • Seu conjunto (a cadeia entre os parênteses) deve ser delineado usando aspas (diretiva usebackq). Seu set não tem a cotação final de volta.
  • O caractere | ou "pipe" é reservado. Você deve escapar com um caractere ^.
  • O conjunto de expressões regulares que você passa para o Findstr.exe retornou para mim resultados não intencionais. Eu resolvi isso removendo o arquivo .exe e instruindo o Findstr.exe para procurar minha string no início do fluxo. Limitado desta forma, os meus resultados não incluem programas como o rundll32.exe que o seu conjunto incluía.

Você pode encontrar alguns excelentes exemplos de roteiros nos sites de Rob Vanderwoude e Timo Salmi:

por 15.03.2012 / 20:16