私はchp.exeのようなものを探しています、それはコマンドを実行してそのpidを返すことができます。 CHP.EXEは、一部のアンチウイルスで感染ファイルとして報告されているように見えるため、使用できません。
ありがとう
Wmic process where (Name like '%CHP%') get caption, name, commandline, ProcessId | more
実際のサンプル:
Wmic process where (Name like '%ie%') get caption, name, commandline, ProcessId | more
出力:
Wmic process get ProcessId
クエリ出力から変数にprocessIdのみを抽出します。
ProcID.cmd:
@ECHO OFF
FOR /F %%T IN ('Wmic process where^(Name^="Explorer.exe"^)get ProcessId^|more +1') DO (
SET /A ProcessId=%%T) &GOTO SkipLine
:SkipLine
echo ProcessId = %ProcessId%
出力:
ProcessId = 2372
これは、PowerShellで簡単に実行できます。 Start-Process notepad.exe -PassThru
はメモ帳を起動して戻ります。
Handles NPM(K) PM(K) WS(K) VM(M) CPU(s) Id ProcessName
------- ------ ----- ----- ----- ------ -- -----------
45 6 1672 4240 61 0.02 9212 notepad
そこから、出力($notepad = Start-process notepad.exe -PassThru
その後 $notepad.ID
)そして、それを使って行っていたスクリプトをすべて終了します。
バッチスクリプトに戻す(絶対に必要な場合)には、少し注意が必要です。バッチファイルの使用にまったくこだわっている場合は、関連情報をファイルまたはレジストリキーに書き込むPowerShellスクリプトを記述し、バッチファイルからPowerShellスクリプトを呼び出して、ファイルまたはregを読み取るのがおそらく最も簡単でしょう。バッチスクリプトの後半でキーを押します。
PowerShellにまったく触れたくない場合は、WMICまたはタスクリストを使用して、作成後のプロセスを見つける必要があります。
プログラムを実行してから、このコマンドを発行し、firefox
を必要なプロセス名に置き換えます。
for /f "tokens=2" %a in ('tasklist /nh /fi "imagename eq firefox.exe"') do echo %a
pidのみを出力します。私の場合、出力は5540
別の方法::バッチファイルを作成し、次のコードをバッチファイルに配置できます。最初にnetstatコマンドを実行して、ポート9797のprocessIdを取得します。次に、それを変数に設定します。
@ECHO OFF
FOR /F "tokens=5" %%T IN ('netstat -a -n -o ^| findstr "9797" ') DO (
SET /A ProcessId=%%T) &GOTO SkipLine
:SkipLine
echo ProcessId = %ProcessId%
PAUSE