【问题标题】:Compare number of a specific process to a number将特定进程的编号与编号进行比较
【发布时间】:2012-08-31 07:05:43
【问题描述】:

我在此线程的帮助下获得了特定进程的编号:

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 |查找 /I /C "%procName%"' 命令。 它还为我提供了“回声!a!”的“回声关闭”提示。

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

tasklist /FI "IMAGENAME eq chrome.exe" 2>NUL |寻找 /c /i "chrome.exe"

set a=tasklist /FI "IMAGENAME eq chrome.exe" 2>NUL |查找 /c /i "chrome.exe"

输出分别为 16 和 0。

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

非常感谢!

【问题讨论】:

    标签: batch-file variable-assignment


    【解决方案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 不需要扩展变量,因此删除了setlocal 和endlocal 命令并更改了set /a 语法。

    【讨论】:

    • 我在我的代码中发现了一个小错误,它会导致它计算太多行。我已经编辑了我的答案并纠正了问题。我将skip=2 更改为skip=3。我还删除了一些不必要的代码。
    【解决方案2】:

    在环境 a 中的这一行之后,有被寻找的进程的 pid

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

    【讨论】:

      【解决方案3】:

      我想我找到了解决办法:

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

      我也认为代码可以简化。希望你们中的一些人可以提供简短的版本:)

      【讨论】:

      • 顺便说一句,当您在使用变量之前调用另一个 bat 时,您应该在要调用的 bat 前面使用“call”,否则该变量将被禁用。看一个成功的例子:tasklist /fi "imagename eq %procName%" 2>nul | findstr /i %procName% | find /c /v "">proc_temp call Other.bat set /p current_num= nul | findstr /i %procName% | find /c /v "">proc_temp Other.bat rem 这将禁用 current_num set /p current_num=
      • 同时使用findstr.exe 和find.exe 您会不必要地搜索相同的信息两次。此外,find /v 删除了它找到的行,从而搞砸了计数。要在此处使用您的代码,您应该将第一行更改为 tasklist /fi "imagename eq %procName%" 2&gt;nul | find /c "%procName%" &gt; proc_temp。
      猜你喜欢
      • 2019-02-20
      • 1970-01-01
      • 2012-11-15
      • 1970-01-01
      • 1970-01-01
      • 2014-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多