O que você procura é o nome do arquivo em que cada processo está trabalhando - se houver.
plano de fundo
O problema é que o nome do arquivo sendo trabalhado (ao contrário do nome do arquivo executável) normalmente não é exibido na saída da lista de tarefas ou na saída de qualquer outra ferramenta de linha de comando padrão que conheço.
Um processo sempre tem uma lista interna dos arquivos abertos - eles estão no processo "manipula tabela". Isto é visível em, e. Process Explorer, mas você quer uma ferramenta de linha de comando. E não há uma maneira geral de saber, entre todos os arquivos que um processo abriu, qual é o documento que o processo é aberto para edição.
No entanto. Alguns aplicativos, incluindo o Notepad, o pacote Office e muitos outros, definem o nome do arquivo no título da janela. por exemplo. "Notepad file1.txt" Isto não está em uma forma consistente de um aplicativo para outro. Um aplicativo pode definir o título de suas janelas para qualquer coisa que desejar. Um programa poderia, por exemplo, colocar seu próprio nome primeiro e depois o nome do arquivo. Tanto faz.
Então, você quer ver os títulos das janelas. O Gerenciador de Tarefas pode mostrar títulos de janela, mas você quer uma ferramenta de linha de comando. Como observa JosefZ, tasklist / v pode fazer isso. (Há também um pequeno programa chamado tlist que o fará. Ele vem com o pacote Windows Debugging Tools.) No entanto, eles mostrarão a você, além dos processos que você deseja, um monte de processos que não possuem nomes de janelas. .
resposta
PowerShell para o resgate! Tente isto no seu prompt de comando: (Você não precisa estar em c: \, isso é apenas um exemplo)
c:\> powershell -command "get-Process | where-Object {$_.mainWindowTitle} | format-table id,name,mainwindowtitle -AutoSize"
Isso listará todos os processos que possuem um título de janela não vazio.
Se você quiser apenas ver processos executando um programa em particular - como o bloco de notas - você pode colocar esse nome antes do primeiro canal, assim:
c:\> powershell -command "get-Process notepad | where-Object {$_.mainWindowTitle} | format-table id,name,mainwindowtitle -AutoSize"
Isso filtra a saída de get-Process antes que ele atinja o restante dos comandos. o comando where-Object filtra para títulos de janelas não vazios, e a tabela de formatos apenas coloca o resultado em uma tabela limpa.
Agora, vamos tornar isso mais fácil. Coloque o seguinte em um arquivo .cmd, digamos que você o chame de wn.cmd (wn for windowname). Coloque o wn.cmd em algum diretório que esteja no seu caminho. (Eu sempre crio um diretório chamado c: \ progs e adiciono isso ao meu caminho, para pequenas coisas como essa. Eu também coloco as ferramentas sysinternals nesse diretório.)
c:\> @echo off
c:\> powershell -command "get-Process %1 | where-Object {$_.mainWindowTitle} | format-table id,name,mainwindowtitle -AutoSize"
exemplos
Agora, em um prompt de comando ... assumindo que wn.cmd esteja em algum lugar em seu caminho ... você pode simplesmente digitar
c:\> wn
e você obterá a lista completa de processos com janelas nomeadas ... assim:
Id Name MainWindowTitle
-- ---- ---------------
9596 chrome How can I show the file NAME of each running process from the command-line in Windows? - Super ...
11980 cmd Command Prompt - wn
10164 explorer progs
10180 Horas Horas - Fri 11
2520 notepad windownames.ps1 - Notepad
15348 notepad notes2.txt - Notepad
8304 OUTLOOK Inbox - mailbox - Outlook
17312 powershell_ise Windows PowerShell ISE
6140 TTool103 Alarm
e se você digitar, por exemplo
c:\> wn notepad
você recebe apenas os que estão executando o bloco de notas:
Id Name MainWindowTitle
-- ---- ---------------
6240 notepad Untitled - Notepad
13096 notepad wn.cmd - Notepad
15348 notepad notes2.txt - Notepad
(Esta seleção atende pelo nome do executável, não pelo título da janela.)
Crédito para onde o crédito é devido: Encontrei o "script" original do powershell para listar processos com janelas nomeadas de esta página em powershell.com . Embalá-lo em um arquivo .cmd só facilita o uso.