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

Windows 7 如何使用批处理文件计算当前运行的同名进程的数量,windows-7,process,batch-file,taskmanager,Windows 7,Process,Batch File,Taskmanager,我想使用批处理文件比较Windows 7计算机上运行的名为“standard.exe”的进程数与名为“basic.exe”的进程数。如果名为“standard.exe”的进程数等于名为“basic.exe”的进程数,则不应发生任何情况,如果数字不相等,则应重新启动basic.exe 有什么想法吗?已经找到了以下代码来检查进程是否正在运行,但现在我想计算具有相同名称的进程的数量 tasklist /FI "IMAGENAME eq myapp.exe" 2>NUL | find /I /N

我想使用批处理文件比较Windows 7计算机上运行的名为“standard.exe”的进程数与名为“basic.exe”的进程数。如果名为“standard.exe”的进程数等于名为“basic.exe”的进程数,则不应发生任何情况,如果数字不相等,则应重新启动basic.exe

有什么想法吗?已经找到了以下代码来检查进程是否正在运行,但现在我想计算具有相同名称的进程的数量

tasklist /FI "IMAGENAME eq myapp.exe" 2>NUL | find /I /N "myapp.exe">NUL
if "%ERRORLEVEL%"=="0" echo Programm is running

提前谢谢

使用您的示例,只需将find中的/N替换为/C即可返回进程计数

tasklist /FI "IMAGENAME eq myapp.exe" 2>NUL | find /I /C "myapp.exe"
然后,您可以将其简化为:

tasklist | find /I /C "myapp.exe"
虽然正如安德烈M指出的,它将同时匹配myapp.exe和notmyapp.exe

至于你问题的第二部分,简单地说:

set a=tasklist /FI "IMAGENAME eq myapp.exe" 2>NUL | find /I /C "myapp.exe" 
set b=tasklist /FI "IMAGENAME eq myapp2.exe" 2>NUL | find /I /C "myapp2.exe" 
if not a==b do ( 
    stuff 
) 

可能有一种更简洁的方法可以做到这一点,但下面的代码似乎可以做到这一点:

:begin
tasklist | find /I /C "standard.exe">D:\tmpfile1.txt
tasklist | find /I /C "basic.exe">D:\tmpfile2.txt
set /p var1= <D:\tmpfile1.txt
set /p var2= <D:\tmpfile2.txt
if %var1% LSS %var2% goto restart
if %var1% EQU %var2% goto wait

:wait
echo waiting..
ping -n 300 127.0.0.1 > nul
goto begin

:restart
echo error has occured, all processes will be restarted
taskkill /f /im standard.exe
taskkill /f /im basic.exe
ping -n 30 127.0.0.1 > nul

goto begin
:开始
任务列表|查找/I/C“standard.exe”>D:\tmpfile1.txt
任务列表|查找/I/C“basic.exe”>D:\tmpfile2.txt
set/p var1=nul
开始

干杯

如果不想写入文件,请将
任务列表
替换为,并将
var1
命令设置为

for /f "tokens=1,*" %%a in ('tasklist ^| find /I /C "standard.exe"') do set var1=%%a
第二个也一样

for /f "tokens=1,*" %%a in ('tasklist ^| find /I /C "basic.exe"') do set var2=%%a

“标准.exe”进程是否可能比“basic.exe”进程少?如果是这样,在这种情况下应该怎么做?standard.exe只能小于或等于basic.exe(运行basic.exe会创建一个名为standard.exe的进程)。因此,确实很可能“标准.exe”进程比“basic.exe”进程少,在这种情况下,所有basic.exe进程都需要关闭并重新启动。通常,我认为,第二段代码不等于第一段代码,因为它将“myapp.exe”与“notmyapp.exe”一起计算。谢谢Maynza,这似乎确实有效。但是,我仍然不确定如何在两个进程之间进行比较?有什么提示吗?您可以在环境变量中存储一个或两个值,然后比较它们。ie:set a=tasklist/FI“IMAGENAME eq myapp.exe”2>num | find/I/C“myapp.exe”set b=tasklist/FI“IMAGENAME eq myapp2.exe”2>num | find/I/C“myapp2.exe”如果a==b do(stuff)我不是批处理文件的专家@只要我尝试为输出设置一个变量,Maynza的解决方案就可以工作。因此,该行给出了正确的返回值,并直接粘贴到cmd。。。但在批处理集x=。。。给0。。。然而,使用Win10 x64,这个解决方案对我来说很有效!