То, что вы ищете, это имя файла, над которым работает каждый процесс - если таковой имеется.
фон
Проблема в том, что имя файла, над которым выполняется работа (в отличие от имени исполняемого файла), обычно не отображается в выводе списка задач или выводе любого другого стандартного инструмента командной строки, о котором я знаю.
У процесса всегда есть внутренний список файлов, которые он открыл - они находятся в "дескрипторной таблице" процесса. Это видно, например, в Process Explorer, но вам нужен инструмент командной строки. И нет никакого общего способа узнать, среди всех файлов, открытых процессом, какой документ является документом, открываемым процессом для редактирования.
Тем не мение. Некоторые приложения, в том числе Блокнот, пакет Office и многие другие, задают имя файла в заголовке окна. например, «Блокнот file1.txt» Это не в согласованной форме от одного приложения к другому. Приложение может установить заголовок своего окна на что угодно. Программа может, например, сначала указать собственное имя, а затем имя файла. Без разницы.
Итак, вы хотите посмотреть на заголовки окон. Диспетчер задач может показывать заголовки окон, но вам нужен инструмент командной строки. Как отмечает JosefZ, tasklist /v может сделать это. (Существует также небольшая программа под названием tlist, которая сделает это. Он поставляется с пакетом средств отладки Windows.) Однако они покажут вам, помимо процессов, которые вы хотите, целую кучу процессов, которые не имеют имен окон.
ответ
PowerShell на помощь! Попробуйте это в командной строке: (Вы не должны быть в c:\, это только пример)
c:\> powershell -command "get-Process | where-Object {$_.mainWindowTitle} | format-table id,name,mainwindowtitle -AutoSize"
Это перечислит все процессы, которые имеют непустой заголовок окна.
Если вы хотите просто увидеть процессы, выполняющие определенную программу, например блокнот, вы можете поместить это имя перед первым каналом, например так:
c:\> powershell -command "get-Process notepad | where-Object {$_.mainWindowTitle} | format-table id,name,mainwindowtitle -AutoSize"
Это фильтрует вывод get-Process до того, как он достигнет остальных команд. команда where-Object фильтрует непустые заголовки окон, а таблица форматов просто помещает результат в аккуратную таблицу.
Теперь давайте сделаем это проще. Поместите следующее в файл .cmd, скажем, вы называете его wn.cmd (wn для windowname). Поместите wn.cmd в какой-то каталог, который находится на вашем пути. (Я всегда создаю каталог с именем c:\progs и добавляю его к своему пути, для таких мелочей, как этот. Я поместил инструменты sysinternals в этот каталог тоже.)
c:\> @echo off
c:\> powershell -command "get-Process %1 | where-Object {$_.mainWindowTitle} | format-table id,name,mainwindowtitle -AutoSize"
Примеры
Теперь в командной строке ... при условии, что wn.cmd находится где-то на вашем пути ... вы можете просто набрать
c:\> wn
и вы получите полный список процессов с именованными окнами .. вот так:
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
и если вы наберете, например,
c:\> wn notepad
вы получаете только те, на которых работает блокнот:
Id Name MainWindowTitle
-- ---- ---------------
6240 notepad Untitled - Notepad
13096 notepad wn.cmd - Notepad
15348 notepad notes2.txt - Notepad
(Этот выбор идет по имени исполняемого файла, а не заголовку окна.)
Кредит, где кредит должен: я нашел оригинальный "скрипт" powershell для перечисления процессов с именованными окнами на этой странице powershell.com . Упаковка в файл .cmd упрощает его использование.