gpt4 book ai didi

batch-file - 在Windows Server中获取进程的pid

转载 作者:行者123 更新时间:2023-12-03 13:20:22 25 4
gpt4 key购买 nike

我正在寻找一个脚本来根据任务管理器的 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 是你需要的。虽然你需要一些技巧才能从批处理中使用它。我使用了更复杂的命令行,其中包含引号、括号、空格、文件分隔符....你需要更改它并设置你想要的值(value)。

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

@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%

关于batch-file - 在Windows Server中获取进程的pid,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35272950/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com