将特定进程的编号与数字进行比较

时间:2012-08-31 07:05:43

标签: batch-file variable-assignment

我在这个帖子的帮助下得到了一个特定进程的编号:

How to count amount of processes with identical name currently running, using a batchfile

我希望将此命令的结果分配给变量,然后将变量与数字进行比较。我的代码如下:

@echo off
setlocal enabledelayedexpansion 
set procName=chrome.exe
set a=tasklist /FI "IMAGENAME eq %procName%" 2>NUL | find /I /C "%procName%"
if !a! equ 1 (
    echo !a!
    echo %procName% starts to run...
) else (
    echo !a!
    echo %procName% has not run!
)

这里我得到'0' 'set a = tasklist / FI“IMAGENAME eq%procName%”2> NUL | find / I / C“%procName%”'命令。 它还给了我“回声关闭”的暗示'echo!a!'。

仅供参考,在cmd中运行以下命令时

  

任务列表/ FI“IMAGENAME eq chrome.exe”2> NUL |找    / c / i“chrome.exe”

     

设置a = tasklist / FI“IMAGENAME eq chrome.exe”2> NUL   |找/ c / i“chrome.exe”

输出分别为16和0。

是什么原因?如何将命令的结果分配给变量?如何将变量与数字进行比较?

非常感谢你!

3 个答案:

答案 0 :(得分:1)

嗯,set a=tasklist /FI "IMAGENAME eq chrome.exe" 2>nul | find /c "chrome.exe"对我来说也不起作用。这很好,因为我不知道它应该如何运作。

我相信这会更快,因为它没有FIND.EXE的开销,写作,阅读和删除proc_temp

set a=0
for /f "skip=3" %%x in ('tasklist /FI "IMAGENAME eq chrome.exe"') do set /a a=a+1
echo Total chrome.exe tasks running: %a%

编辑:我刚发现set /a不需要扩展变量,因此删除了setlocalendlocal命令,并更改了set /a语法。

答案 1 :(得分:0)

在环境中的这一行之后,有一个寻求过程的pid

for /F "tokens=1,2,*" %%a in ('tasklist /fi "imagename eq %procName%"') do if !%%a!==!%procName%!  set a=%b

答案 2 :(得分:0)

我想我找到了一个解决方案:

tasklist /fi "imagename eq %procName%" 2>nul | findstr /i %procName% | find /c /v "">proc_temp
set /p current_num= < proc_temp
echo !current_num!

另外我认为代码可以简化。希望你们中的一些人可以给出简短的版本:)