我正在尝试编写一个批处理来检查进程“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/