【问题标题】:How to count amount of processes with identical name currently running, using a batchfile如何使用批处理文件计算当前正在运行的同名进程的数量
【发布时间】:2011-09-26 20:53:48
【问题描述】:

我想使用批处理文件来比较在我的 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

提前致谢!

【问题讨论】:

  • “standard.exe”进程是否可能比“basic.exe”进程少?如果是这样,这种情况下应该怎么做?
  • standard.exe 只能小于或等于 basic.exe(运行 basic.exe 会创建一个名为 standard.exe 的进程)。因此,确实很有可能“standard.exe”进程比“basic.exe”进程少,在这种情况下,所有basic.exe进程都需要关闭并重新启动。

标签: windows-7 process batch-file taskmanager


【解决方案1】:

如果您不想写入文件,请将tasklist 和设置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

【讨论】:

  • 我不是批处理文件方面的专家。只要我尝试为输出设置一个变量,@Maynza 的解决方案就可以工作。所以该行给出了直接粘贴到 cmd 的正确返回值...但在批处理中设置 x=... 给出 0...但是,使用 Win10 x64,这个解决方案对我有用!
【解决方案2】:

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

tasklist /FI "IMAGENAME eq myapp.exe" 2>NUL | find /I /C "myapp.exe"

然后你可以把它减少到:

tasklist | find /I /C "myapp.exe"

尽管正如 Andriy 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 
) 

【讨论】:

  • 一般情况下,我认为,第二段代码不等于第一段,因为它将“myapp.exe”和“notmyapp.exe”一起计算。
  • 感谢 Maynza,它似乎确实有效。但是,我仍然不确定如何比较两个进程数?有什么提示吗?谢谢
  • 您可以将其中一个或两个值存储在环境变量中,然后进行比较。即:设置 a=tasklist /FI "IMAGENAME eq myapp.exe" 2>NUL |查找 /I /C "myapp.exe" set b=tasklist /FI "IMAGENAME eq myapp2.exe" 2>NUL | find /I /C "myapp2.exe" if a==b do ( stuff )
【解决方案3】:

可能有一种更简洁的方法,但下面的代码似乎可以解决问题:

: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

干杯!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-29
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    • 1970-01-01
    • 2015-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多