2014-03-04 26 views
2

我正在尝试编写一个批处理来检查正在运行的进程“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个进程运行的实例)。但是,在我的任务管理器中,我可以看到显然有两个实例正在运行。我认为这可能是一个定义价值的问题?我不知道,我对此很新。任何帮助?谢谢!

UPDATE

好吧,我现在已经改成了这个(由脱线建议)

@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正在运行。现在有什么想法?

+0

我认为代码不会进入if语句内部并继续正常流程。所以每次它杀死进程。只是为了澄清,在unix中是否有任何命令名为lss或gtr。因为我对unix太陌生了。但是我只看到了-lt和-gt命令。所以只是为了确认。 – user3256147

回答

1

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

@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 
+0

我正在运行Windows 7.所以你说我应该使用这种类型的代码? – wafflewrestler

+0

Windows 7比XP Pro更高,这也会起作用。 – foxidrive

+0

好吧我会试试这个......编辑:嗯......我仍然有上面提到的问题,它认为有0个进程运行的实例。当我从1更改为0时,过程停止。但在1时,它只是回到ECHO继续 – wafflewrestler

1

我建议你的逻辑有问题。

的代码应该去endprocess如果发现数为< 2 - 即0或1。如果lss 2测试失败,则计数必须3+,所以gtr 1测试总会成功。

我不知道你为什么不干脆用

if %value% neq 1 goto continue 

甚至

if %value% equ 1 start taskkill /f /im example.exe 

,不过也许你还没有告诉我们,要能够检测其他实例-counts - 以及隐藏您正在检查的可执行文件的名称。

现在 - 向我们展示文件的内容可能非常有用。你确定该文件实际上是在生成吗?如果您尝试使用"%temp%\variable.txt"而不是%temp%\variable.txt - 即"quote the filename",会发生什么情况?

相关问题