Windowsでコマンドラインから実行中の各プロセスのファイルNAMEを表示する方法を教えてください。


4

実行中のプロセスのPIDがある場合、ファイルのNAMEを取得する方法について疑問に思いました。

2つのnotepad.exeテキストファイルが連続して実行されていて、コマンドラインで実行したとします。 (コード提供: https://stackoverflow.com/questions/13507902/how-to-extract-a-specific-field-from-output-of-tasklist-on-the-windows-command-l ):

for /f "tokens=2 delims=," %F in ('tasklist /nh /fi "imagename eq notepad.exe" /fo csv') do @echo %~F

結果が出ます:

6624 7124

どのテキストファイル名はPID 6624ですか?またはどのテキストファイル名はPID 7124ですか?

PID 6624が 'findme1.txt'で、PID 7124がfindme2.txtであるとします。

どのPIDプロセスがKILLするのかわかりません。

間違ったプロセスを殺して重要な情報を失う可能性があります。

言い換えれば、上記のfindme * .txtファイルのうちどれがfindme1.txtです。 そして上記のfindme * .txtファイルのうちどれがfindme2.txtですか?

システムの重要な情報を含むfindme2.txtではなく、findme1.txtだけを殺したいのです。

どんな提案でも私にとって最も歓迎され感謝されます。 事前にどうもありがとうございました。


やってみる "tokens=2,9 delims=," とタスクリスト /v 冗長なパラメータ … do @echo %~F:%~G
JosefZ

回答:


0

あとは、各プロセスが処理しているファイルの名前です。

バックグラウンド

問題は、作業中のファイルの名前(実行可能ファイルの名前とは異なり)がタスクリストの出力や、他の標準的なコマンドラインツールの出力に表示されないことです。

プロセスは常にそれが開いているファイルの内部リストを持っています - これらはプロセスの "handleテーブル"にあります。これは例えばに見られる。プロセスエクスプローラ、しかしあなたはコマンドラインツールが欲しい。そして、プロセスが開いているすべてのファイルの中から、プロセスが編集のために開いている文書がどれであるかを知る一般的な方法はありません。

しかしながら。メモ帳、Officeスイート、その他多くのアプリケーションを含む一部のアプリケーションは、ウィンドウのタイトルにファイル名を設定します。例えば"Notepad file1.txt"これはあるアプリケーションから別のアプリケーションへの一貫した形式ではありません。アプリは、ウィンドウのタイトルを好きなものに設定できます。たとえば、プログラムは自分自身の名前を最初に置き、次にファイル名を置くことができます。なんでも。

それで、あなたはウィンドウタイトルを見たいです。タスクマネージャはウィンドウのタイトルを表示できますが、コマンドラインツールが必要です。 JosefZが指摘するように、tasklist / vはこれをすることができます。 (それを実行するtlistと呼ばれる小さなプログラムもあります。それはWindows Debugging Toolsパッケージに付属しています。)しかし、これらはあなたが望むプロセスに加えて、ウィンドウ名を持っていないプロセスの全体の束を示します。 。

回答

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コマンドは空でないウィンドウタイトルをフィルタリングし、format-tableは結果をきれいなテーブルに格納するだけです。

それでは、簡単にしましょう。以下を.cmdファイルに入れて、あなたがそれをwn.cmd(windownameのためのwn)と呼ぶとしましょう。あなたのパスにあるディレクトリに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ファイルにパッケージ化するだけで、使いやすくなります。


ありがとうジェイミー。どの実行可能ファイル名のテキストを削除したくないかをADVANCEで知っていると仮定します。 'dontkillit.txt' SINGLEコマンドラインエントリを使って不要なテキストファイルを削除しながら、重要なメモ帳テキストファイルを削除しない方法。 (論理的なコマンドラインコース) 'TASKKILL / PID(killit1.txtの)/ PID(killit2.txtの)のようなものだが、dontkillit.txtのPIDを強制終了しないでください。メモ帳テキストファイル名。このPID情報を使用して、1つのコマンドラインエントリを書き込む重要なメモ帳テキストを節約できます。
dzur

( "dontkillit.txt"は実行ファイル名ではありません。)指定したファイルを開いているプロセス以外のすべてのnotepad.exeプロセスを強制終了しますか?それは少し危険です。重要なファイル名を誤って入力した場合はどうなりますか?その後、スクリプトはすべてのメモ帳プロセスを強制終了します。
Jamie Hanrahan
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.