web-dev-qa-db-ja.com

プロセスを実行し、バッチファイルのPID(CHP.EXEとして)を返す

私はchp.exeのようなものを探しています、それはコマンドを実行してそのpidを返すことができます。 CHP.EXEは、一部のアンチウイルスで感染ファイルとして報告されているように見えるため、使用できません。

ありがとう

7
Tobia
Wmic process where (Name like '%CHP%') get caption, name, commandline, ProcessId | more

実際のサンプル:

Wmic process where (Name like '%ie%') get caption, name, commandline, ProcessId | more

出力:

ProcessId where like name Wmic Far manager

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    
5
STTR

これは、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またはタスクリストを使用して、作成後のプロセスを見つける必要があります。

3
Tanner Faulkner

プログラムを実行してから、このコマンドを発行し、firefoxを必要なプロセス名に置き換えます。

for /f "tokens=2" %a in ('tasklist /nh /fi "imagename eq firefox.exe"') do echo %a

pidのみを出力します。私の場合、出力は5540

0
user373230

別の方法::バッチファイルを作成し、次のコードをバッチファイルに配置できます。最初に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
0
flopcoder