我正在寻找一个脚本来获取基于任务管理器的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,因为脚本也可能包含关键字。执行脚本时的参数被视为关键字
答案 0 :(得分:4)
WMIC PROCESS
就是你所需要的。虽然你需要一些技巧来批量使用它。我使用了更复杂的命令行,其中包含引号,括号,空格,文件分隔符。 ..您需要更改它并设置所需的值。
首先你需要在命令行中加倍每个反斜杠(脚本应该这样做我的意思).Quotes也可能是一个问题,需要用%
替换或用{{转义1}}(\"
使用WMIC
一个subset of WQL
命令,SQL
用作通配符。另外,您需要使用两次处理结果%
loop to rid-off unwanted special characters。FOR
可用于直接声明变量/值对。所以这里是:
/Format:Value
答案 1 :(得分:0)
wmic process where name='explorer.exe' get commandline, pid /format:list
是一种方式。另请参阅tasklist /v
。