すでに実行されているconhostプロセスがいくつかあるとします。次に、バッチファイルを実行します。これにより、cmd
プロセスが開始され、別のconhostプロセスが開きます。バッチファイル内から
PID
を取得する方法がわかりません 。私の目標は、以前(またはバッチファイルの実行後に)実行されていた他のすべてのconhostプロセスを閉じ、を閉じないようにすることです。 )conhostは非常にバッチファイルに関連付けられており、cmd.exe
すべてのクロージングを行います。そのconhostが閉じられると、そのcmd
プロセスも閉じられ、バッチファイルは途中で終了します(その後、他のことを実行してほしい)。
これは、上記のリンクで尋ねられた質問の複製ではありません。その質問は、pid
のcmd
の取得のみを扱い、関連するconhostPID
。
次のコードスニペットは解決策につながる可能性があります。
@ECHO OFF
SETLOCAL EnableExtensions
::: get my own process ID - use any method
::: applied here: altered TonyRoth's answer https://serverfault.com/a/126643/257436
set "_title=a885974x%random%"
title %_title%
for /f "tokens=2" %%G in ('tasklist /V ^| findstr "%_title%"') do (
set "_myProcessID=%%~G"
)
::: get the associated conhost process ID
set "_wQuery=ParentProcessId=%_myProcessID% and Name='conhost.exe'"
::: debug ::: wmic process where "%_wQuery%" get Name, ProcessId, WindowsVersion
for /f "usebackq" %%G in (`
wmic process where "%_wQuery%" get ProcessId^, WindowsVersion^|findstr /R "[0-9]"
`) do set "_myConhostID=%%~G"
::: propagate results
set _my