【发布时间】:2016-02-07 22:54:22
【问题描述】:
编辑 @aschipfl - 你的反应是完美的!答案如下。
历史.. 为什么要这样做? 99.9% 的情况下,我们能够简单地执行以下操作:
WMIC service where "name like 'tomcat%%'" CALL stopservice
而且效果很好。但是,曾经有一次我们会让 Tomcat 留在内存中而不是停止。所以我们必须终止它。我必须每月一次在大约 40 台服务器上添加我们供应商提供的“签名”文件,我必须 100% 确定我能够毫无问题地这样做。我们的大部分问题似乎都与 Tomcat7 和 JDK7 相关,并进行了一些内存调整。
我的批处理脚本中有以下内容,这两个都很好用。
WMIC Path win32_process WHERE "CommandLine Like '%%tomcat%%'" CALL Terminate
WMIC Path win32_process WHERE "CommandLine Like '%%java%%'" CALL Terminate
但是,我真的不希望终止 tomcat6w.exe 或 tomcat7w.exe。我真正想做的是终止tomcat?.exe,但不终止:tomcat?w.exe
当我尝试以下操作时,我刚刚杀死了我的服务器 - 啊!!
WMIC service where "name like 'tomcat%%'" get processid | WMIC Path win32_process WHERE "processid = processid" CALL Terminate
我认为我可以执行以下操作,但还不行:
for /F "skip=1" %%a in ('WMIC service where "name like 'tomcat%%'" get processid') do set pid=%%a
WMIC Path win32_process WHERE "processid = %pid%" CALL Terminate
但是,由于我正在使用 tomcat 做通配符,我认为它正在添加额外的回车..
Ref.. 我确实在这里找到了一些有趣的信息: http://www.dostips.com/forum/viewtopic.php?f=3&t=3815
希望这有意义吗?
回答
FOR /F "skip=1" %%a IN ('WMIC service where "name like 'tomcat%%'" get processid') DO (
FOR /F "delims=" %%b IN ("%%a") DO SET pid=%%b
)
WMIC Path win32_process WHERE "processid = %pid%" CALL Terminate
pause
谢谢!
【问题讨论】:
-
额外的回车来自
wmic命令(与是否使用通配符无关);wmic输出 Unicode 文本,for /F转换为 ASCII 不完美;要摆脱它,只需环绕另一个for /F循环:for /F "skip=1" %%a in ('WMIC service where "name like 'tomcat%%'" get processid') do for /F "delims=" %%b in ("%%a") do set pid=%%b -
太棒了!这就是我一直在寻找的。span>
-
太棒了!我只是将其发布为答案...
标签: windows batch-file service terminate wmic