3

独自のコマンド プロンプトから PID を取得しようとしています。しかし、以下のコマンドを使用すると、常に目的の出力が得られません。以下の文のどこが間違っていたのか教えてください。

cmd.exe /c title="mycmd" & tasklist /v /fo csv | findstr /i "mycmd" & dir & help

編集:

以下のコマンドは正しく機能しています。しかし、それをさらに2つのコマンドと組み合わせると。動いていない。

cmd.exe /c title="mycmd" & tasklist /v /fo csv | findstr /i "mycmd"

追加情報:

Javaを使用しています

final List<String> commands = new ArrayList<String>();                

commands.add("cmd.exe");
commands.add("/C");

//.. Add more commands

ProcessBuilder pb = new ProcessBuilder(commands);
4

5 に答える 5

3

以下のバッチ ファイルを使用して、コマンド プロンプトの PID を取得できます。

参照: http://social.msdn.microsoft.com/Forums/en-US/msbuild/thread/270f0842-963d-4ed9-b27d-27957628004c/

GetPID.bat

@echo off
if not defined SESSIONNAME set SESSIONNAME=Console
setlocal
set instance=%DATE% %TIME% %RANDOM%
title %instance%
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 determine the Process ID of the current script.  Exiting.& exit /b 1
echo PID: "%PID%"
于 2013-04-24T06:34:25.427 に答える
1

サブシェルで実行する複合コマンドを引用符で囲む必要があります。

cmd.exe /c "title="mycmd" & tasklist /v /fo csv | findstr /i "mycmd" & dir & help"

引用符がない場合、コマンドは次のように解析されます

(cmd.exe /c title="mycmd") & (tasklist /v /fo /csv) | (findstr /i "mycmd") & (dir) & (help)

そのため、指定されたタイトルtasklistのインスタンスが実行されるまでに、すでに終了しています。cmd.exe

于 2013-04-27T04:58:12.523 に答える
0

おそらくいくつかのリダイレクト演算子が欠けています。詳しくはこちらをご覧ください。

于 2013-04-24T05:51:14.850 に答える
0

CMD ウィンドウに一意の名前を付けます (この例では「test」)。「Windowstitle」は「test*」です。これは、実行されたコマンド ラインがタイトルに添付されるためです。

title test
taskkill /FI "IMAGENAME eq cmd.exe" /FI "WINDOWTITLE ne test*" /f
于 2013-10-23T08:34:31.627 に答える