開いている各端末のPIDを取得する必要があります。現在実行中の端末のPIDを取得して変数に保存する最速の方法
私は今、作品に何かを持っています。しかし、正しいPIDを与えるわけではなく、少し遅いです。
@echo off
rem Note: Session Name for privileged Administrative consoles is sometimes blank.
if not defined SESSIONNAME set SESSIONNAME=Console
setlocal
set instance=%DATE% %TIME% %RANDOM%
title %instance%
rem PID Find
for /f "usebackq tokens=2" %%a in (`tasklist /FO list /FI "SESSIONNAME eq %SESSIONNAME%" /FI "USERNAME eq %USERNAME%" /FI "WINDOWTITLE eq %instance%" ^| find /i "PID:"`) do set PID=%%a
if not defined PID for /f "usebackq tokens=2" %%a in (`tasklist /FO list /FI "SESSIONNAME eq %SESSIONNAME%" /FI "USERNAME eq %USERNAME%" /FI "WINDOWTITLE eq Administrator: %instance%" ^| find /i "PID:"`) do set PID=%%a
if not defined PID echo !Error: Could not get PID of current process. Exiting.& exit /b 1
echo Here's the PID: %PID%
私はそれを説明するかどうかはわかりませんが、これは実行されるたび、それはcmd.exe
のPIDを与えるものではありませんが、それは全体のプロセス自体のPIDを返します。したがって、通常のcmd
を実行した場合、正しいPIDが返されますが、Cmder
のような別の端末を実行した場合、Cmder
のPIDは、cmd.exe
でなくなります。
ループでwmic
というループを使用するソリューションが多数ありましたが、動作させることができません。私が試してみるたびに、それが返すPIDは、実行するたびに常に異なっています。明らかに間違っています。
私は次のように使用することができ、そしてそれは、サードパーティ製の端末で動作し、私は上記の持っているものよりも高速です:
wmic process where "name='WMIC.exe'" get parentprocessid
私はちょうど私がの出力のうち、PIDを抽出できるかどうかはわかりませんこの。端末のPIDを取得する方法はありますか?
WMIC /OUTPUT:temp.txt Process Where "Caption='WMIC.exe'" Get ParentProcessID
For /F "Skip=1" %%A In ('Type temp.txt') Do If Not Defined PID Set "PID=%%A"
Del temp.txt
Echo=%PID%
あなたが別のWMICのプロセスが実行される可能性があることを感じた場合Where "CommandLine Like…
を使用するために、あなたのWMICコマンドを調整することができます。私のコメントでアイデアを使用して
[this](https://github.com/npocmaka/batch.scripts/blob/master/hybrids/.net/getCmdPID.bat)を確認してください。現在のPIDをエラーレベル – npocmaka
に返します。この[スレッド](http://www.dostips.com/forum/viewtopic.php?t=6133)もチェックしてください – npocmaka
あなたのwmicコマンドは、あなたがドンした場合に必要なParentProcessIDを取得します効果的に別のcmd.exeプロセスを開始するforループ内で実行しないでください。 WMICコマンドの出力/出力が容易になる場合があります。 – Compo