我在这个帖子的帮助下得到了一个特定进程的编号:
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。
是什么原因?如何将命令的结果分配给变量?如何将变量与数字进行比较?
非常感谢你!
答案 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
不需要扩展变量,因此删除了setlocal
和endlocal
命令,并更改了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!
另外我认为代码可以简化。希望你们中的一些人可以给出简短的版本:)