【发布时间】:2014-04-05 08:12:24
【问题描述】:
我正在尝试编写一个批处理来检查进程“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
我的问题是:它总是认为 value 是 lss 2 (它认为运行的进程实例少于 2 个)。但是,在我的任务管理器中,我可以看到显然有 2 个实例正在运行。我认为这可能是定义价值的问题?我不知道,我对此很陌生。有什么帮助吗?谢谢!
更新
好的,我现在把它改成了这个(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 正在运行。现在有什么想法吗?
【问题讨论】:
-
我认为代码没有进入 if 语句并继续正常流程。所以每次它都会杀死进程。只是为了澄清一下,在 unix 中是否有任何名为 lss 或 gtr 的命令。因为我对unix太陌生了。但我只见过 -lt 和 -gt 命令。所以只是为了确认。
标签: windows batch-file process command