【发布时间】:2022-01-17 05:07:06
【问题描述】:
我是批处理脚本的新手,我试图搜索和终止进程列表,但不确定如何在第二个管道之后继续进行
@echo off
wmic process where "Name like 'java%%.exe' " get Processid, Caption, Commandline | find "abc" |
这里我使用 WMIC 列出所有 java 进程并使用 find 过滤它们以在命令行中获取具有特定单词的 java 进程,现在我需要在找到它们后杀死这些进程。这可以通过 taskkill 或在将其写入文件后使用 for 循环来实现吗?我不想使用 call Terminate 来终止进程。有人可以帮我弄这个吗。提前致谢。
【问题讨论】:
-
是的,您可以使用
for /F循环处理%SystemRoot%\System32\find.exe的输出,以处理在后台启动的cmd.exe实例的STDOUT以处理命令行。使用带有for /F "usebackq delims=" %%I in (`%SystemRoot%\System32\wbem\wmic.exe PROCESS where "Name like 'java.exe'" GET ProcessId^,Caption^,CommandLine ^| %SystemRoot%\System32\find.exe "abc"`) do echo %%I的批处理文件来查看要处理的行。然后在命令提示符窗口for /?中运行并阅读输出帮助以了解如何使用tokens=和delims=自定义for /F。 -
最好让
wmic.exe过滤在CommandLine值内包含特定字符串(如abc)的java.exe实例,并让wmic仅输出ProcessId使用选项/Format:VALUE在wmic.exe参数列表的末尾,以便使用for /F更轻松地处理输出。但请注意,wmic.exe使用 UTF-16 LE + BOM 以 Unicode 输出,for /F无法真正正确处理。find.exe可用于获取以 ASCII 格式输出的进程标识符,以便使用for /F进行处理。 -
感谢您的回答!我在浏览了一些文档后想出了这个,这会工作吗? @echo off wmic process where "Name like 'java%%.exe'" get Processid,Caption,Commandline for /F "skip=1 tokens=*" %%a in ('wmic process where "Name like 'java%% .exe' 和命令行如 '%%UAT%%' "get Processid^| findstr /r /v "^$"') 做 ( echo Killing UAT Process id %%a TASKKILL /f /pid %%a )跨度>
标签: windows for-loop batch-file wmic taskkill