1

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

如何使用批处理文件计算当前正在运行的同名进程的数量

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

@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!
)

在这里,'set a=tasklist /FI "IMAGENAME eq %procName%" 2>NUL | 得到了 '0' 查找 /I /C "%procName%"' 命令。它还给了我“回声!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。

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

太感谢了!

4

3 回答 3

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不需要扩展变量,因此删除了setlocalandendlocal命令并更改了set /a语法。

于 2012-09-01T16:54:41.187 回答
0

在环境 a 中的这一行之后,具有所寻求的进程的 pid

for /F "tokens=1,2,*" %%a in ('tasklist /fi "imagename eq %procName%"') do if !%%a!==!%procName%!  set a=%b
于 2012-08-31T09:31:22.723 回答
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!

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

于 2012-09-01T04:58:19.670 回答