在Windows服务器中获取进程的pid

时间:2016-02-08 15:14:29

标签: batch-file cmd windows-server-2008

我正在寻找一个脚本来获取基于任务管理器的CommandLine值的java进程的PID。这些Java进程具有类似的COmmandLine值,但CommandLine中的关键字不同。图像名称无法识别该进程,因为它们都具有相同的java.exe。有办法吗?我根据npocmaka的答案放置了以下代码

@echo off
setlocal enableDelayedExpansion

set "command_line="%1""

set "command_line=!command_line:"=%%!"

echo ~~!command_line!~~

for /f "usebackq tokens=* delims=" %%# in (
    `wmic process where 'CommandLine like "%command_line%"' get /format:value`
) do (
    for /f %%$ in ("%%#") do (
        set "%%$"
    )
)

echo %ProcessId%

我在CommandLine中使用关键字来识别PID。然而,当我执行这个脚本时,我得到了错误的PID。我假设它返回脚本PID,因为脚本也可能包含关键字。执行脚本时的参数被视为关键字

2 个答案:

答案 0 :(得分:4)

WMIC PROCESS就是你所需要的。虽然你需要一些技巧来批量使用它。我使用了更复杂的命令行,其中包含引号,括号,空格,文件分隔符。 ..您需要更改它并设置所需的值。

首先你需要在命令行中加倍每个反斜杠(脚本应该这样做我的意思).Quotes也可能是一个问题,需要用%替换或用{{转义1}}(\"使用WMIC一个subset of WQL命令,SQL用作通配符。另外,您需要使用两次处理结果% loop to rid-off unwanted special charactersFOR可用于直接声明变量/值对。所以这里是:

/Format:Value

答案 1 :(得分:0)

 wmic process where name='explorer.exe' get commandline, pid /format:list

是一种方式。另请参阅tasklist /v