在 windows 服务器中获取进程的 pid
getting pid of process in windows server
我正在寻找一个脚本来根据任务管理器的 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,因为脚本也可能包含关键字。执行脚本时的参数作为关键字
wmic process where name='explorer.exe' get commandline, pid /format:list
是一种方式。另见 tasklist /v
.
WMIC PROCESS
就是你 need.Though 你需要一些技巧才能使用它 batch.I 使用了更复杂的命令行,其中包含引号、括号、空格、文件分隔符....您需要更改它并设置您想要的值。
首先,您需要将命令行中的每个反斜杠加倍(我的意思是脚本应该这样做)。引号也可能是个问题,需要用 %
替换或用 [= 转义13=] (WMIC
使用 WQL
a subset of SQL
commands and %
is used as wildcard).Another thing is you need to process the result twice with FOR
loop to rid-off unwanted special characters./Format:Value
可以用来直接声明 variable/value pairs.So 这里是:
@echo off
setlocal enableDelayedExpansion
:: !!!!!!!!!
set "command_line="C:\Program Files (x86)\Dropbox\Client\Dropbox.exe" /systemstartup"
:: !!!!!!!!
set "command_line=!command_line:\=\!"
set "command_line=!command_line:"=%%!"
::or
::set "command_line=!command_line:"=\"!"
rem echo ~~!command_line!~~
for /f "usebackq tokens=* delims=" %%# in (
`wmic process where 'CommandLine^="!command_line!"' get /format:value`
) do (
for /f %%$ in ("%%#") do (
set "%%$"
)
)
echo %ProcessId%
我正在寻找一个脚本来根据任务管理器的 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,因为脚本也可能包含关键字。执行脚本时的参数作为关键字
wmic process where name='explorer.exe' get commandline, pid /format:list
是一种方式。另见 tasklist /v
.
WMIC PROCESS
就是你 need.Though 你需要一些技巧才能使用它 batch.I 使用了更复杂的命令行,其中包含引号、括号、空格、文件分隔符....您需要更改它并设置您想要的值。
首先,您需要将命令行中的每个反斜杠加倍(我的意思是脚本应该这样做)。引号也可能是个问题,需要用 %
替换或用 [= 转义13=] (WMIC
使用 WQL
a subset of SQL
commands and %
is used as wildcard).Another thing is you need to process the result twice with FOR
loop to rid-off unwanted special characters./Format:Value
可以用来直接声明 variable/value pairs.So 这里是:
@echo off
setlocal enableDelayedExpansion
:: !!!!!!!!!
set "command_line="C:\Program Files (x86)\Dropbox\Client\Dropbox.exe" /systemstartup"
:: !!!!!!!!
set "command_line=!command_line:\=\!"
set "command_line=!command_line:"=%%!"
::or
::set "command_line=!command_line:"=\"!"
rem echo ~~!command_line!~~
for /f "usebackq tokens=* delims=" %%# in (
`wmic process where 'CommandLine^="!command_line!"' get /format:value`
) do (
for /f %%$ in ("%%#") do (
set "%%$"
)
)
echo %ProcessId%