我想使用批处理文件来比较在我的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
提前致谢!
答案 0 :(得分:7)
使用您的示例只需将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
)
答案 1 :(得分:6)
如果您不想编写文件,请替换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
答案 2 :(得分:2)
可能有一种更简洁的方法,但以下代码似乎可以解决这个问题:
: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
干杯!