windows - 批处理文件 - 如果只有一个进程正在运行,如何杀死进程?

标签 windows batch-file process command

我正在尝试编写一个批处理来检查进程“example.exe”有多少个实例正在运行,如果有两个或更多实例,请使其保持运行。但如果只有一个实例在运行,则结束该进程。这是我所拥有的:

@echo off
wmic process where name="example.exe" | find "example" /c > %temp%\variable.txt
set /p value=<%temp%\variable.txt
if %value% lss 2 goto endprocess
if %value% gtr 1 goto continue
:endprocess
start taskkill /f /im example.exe
:continue
ECHO continue
@echo off

我的问题是这样的:它总是认为值是 lss 2 (它认为正在运行的进程实例少于 2 个)。但是,在我的任务管理器中,我可以看到显然有 2 个实例正在运行。我认为这可能是定义值(value)的问题?我不知道,我对此很陌生。有什么帮助吗?谢谢!

更新

好的,我现在将其更改为这个(Magoo 建议的)

@echo off
wmic process where name="example.exe" | find "example" /c > "%temp%\variable.txt"
set /p value=<"%temp%\variable.txt"
if %value% equ 1 goto endprocess
if %value% neq 1 goto continue
:endprocess
start taskkill /f /im example.exe
:continue
ECHO continue
@echo off

这仍然不能完全工作,但我将实例数量从 1 更改为 0 并且结束了该过程。换句话说,1 个进程正在运行,但该批处理文件认为 0 个进程正在运行。现在有什么想法吗?

最佳答案

这使用 XP Pro 及更高版本中的任务列表:

@echo off
tasklist /fi "imagename eq example.exe" /nh |find /i /c "example.exe" > "%temp%\variable.txt"
set /p value=<"%temp%\variable.txt"
if %value% equ 1 taskkill /f /im example.exe
ECHO continue
@echo off

您也可以使用一行而不使用临时文件来完成此操作 - 这使用另一个 findstr 过滤器来检查该数字是否是一行上的单个 1 ,然后是 &&是一个条件运算符,如果找到 1,它将启动 taskkill。

@echo off
tasklist /fi "imagename eq example.exe" /nh |find /i /c "example.exe"|findstr "^1$" >nul && taskkill /f /im example.exe
ECHO continue
@echo off

关于windows - 批处理文件 - 如果只有一个进程正在运行,如何杀死进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22161007/

相关文章:

python - 使用python在windows中获取ppid

.net - 如何命名已部署的应用程序?

Windows 批处理 : echo problems

java - 从 Windows 批处理文件中自行删除 jar

c# - 从 Windows 服务运行命令行 exe

windows - 如何在 Windows 中获取批处理脚本的路径?

windows - 如何关闭从 visual studio 中打开的 "orphaned"控制台窗口?

android - 运行 Monkeyrunner 时出错

c# - 从 C# 关闭最小化/图标化进程

c++ - 按名称返回 PID