2009-08-27 15 views

答えて

3

これは可能かどうかは、バッチファイルの実行方法によって異なります。

一般的に、これを見つけることができる唯一の方法は、バッチを開始するために使用するコマンドラインを調べることです。しかし、

PS Home:\> gwmi Win32_Process | ? { $_.commandline -match "test\.cmd" } | ft commandline,processid -auto 

commandline        processid 
-----------        --------- 
cmd /c ""C:\Users\Me\test.cmd" "    1028 

:Windowsエクスプローラでバッチファイルをダブルクリックする場合は、コマンドラインを含みますが、その後Win32_ProcessGet-WMIObjectを使用することができますPowerShellで

cmd /c ""C:\Users\Me\test.cmd" " 

のようなコマンドラインを取得しますコマンドプロンプトから直接バッチを開始した場合、バッチが実行されていて、誰が起動しているのかを外部的に知る方法はありません。

+0

ヨハネス、優れた答え。 +1コマンドプロンプトから呼び出された特定のバッチファイルを特定する方法については、私の答えを参照してください。この回答に問題がある場合は、それにコメントしてください!ありがとう。 – MagicAndi

+0

私がここでやっていることは、かわいそうではありません。 – Joey

+0

ヨハネス、それはきれいである必要はありません - それはちょうどうまくいくものを得るのに十分です。 – MagicAndi

1

これは信頼できる方法では可能ではないと私は考えています。バッチファイル自体は別のプロセスを起動するのではなく、代わりにcmd.exeインスタンス内で実行されます。特定のプロセスからどのファイルが実行されているかを確実に伝えるエクスポートされたデータはありません。

ただし、バッチファイルを実行するためにcmd.exeインスタンスが特に起動されている場合は例外です。その場合、アプリケーションのコマンドラインに表示され、バッチファイルのコマンドラインをgrepすることができます。これは、cmd.exeプロンプトから複数のバッチファイルを実行しても、通常の場合は解決されません。

+0

有効な回答の匿名のdownvote – JaredPar

2

実行中のバッチファイルのPIDを検出する方法が1つ見つかりました。あなたはそれを識別するために、バッチファイルでバッチコンソールウィンドウのタイトルを設定する必要があります。

... 
Title MyBatchWindow 
... 

PowerShellスクリプトでは、MainwindowTitleプロパティをチェックし、あなたのバッチと一致したプロセスからPIDを取得することができますウィンドウタイトル:

$batchProcess = get-process cmd | where-Object {$_.MainWindowTitle -eq "MyBatchWindow"} 
$processID = $batchProcess .ID 
... 

私はこの方法をテストしている、そして両方のどこでそれをダブルクリックすることによって、またはコマンドラインからそれを呼び出すことにより、バッチファイルを呼び出す動作しているように見えます。

+1

同じウィンドウタイトルを使用して2つのバッチがあるまで動作します:-)。私はあなたがバッチを支配していないと思った。 – Joey

+0

この場合、バッチを制御できます。ただし、同じバッチのインスタンスが複数あった場合、上記の答えはうまくいかないでしょう。 – MagicAndi

+0

まあ、それは、一種の...バッチを実行するプロセスのリストを取得するだろう。しかし、2つ目の行は、現在返されている単一のオブジェクトを想定しているため、異なった外観にする必要があります。 – Joey

関連する問題