我一直在努力尝试将这个批处理脚本放在一起来检查一个进程(它可以是任何进程)。计算它正在运行的实例数并保存该计数的输出。如果它没有运行(计数为0)那么它很好但是如果它正在运行(1或更高)但在这种情况下低于'5'它会回应一个声明。
每当我尝试这样做时,我或者得到'else'不会被识别为内部或外部命令,可操作程序或批处理文件,或者当脚本到达goto:问题时,它似乎完全忽略了else语句。
@echo off
for /f %%g in (' tasklist /FI "IMAGENAME eq chrome.exe" ^| find /I /C "chrome.exe" ') do (
if %%g EQU 0 goto :notrunning
if %%g GTR 0 goto :problem
)
:notrunning
echo Program is not running
pause
:problem
If %%g LSS 5 ( echo problem
) else ( echo chrome is fine
)
pause
答案 0 :(得分:2)
任何goto
都会打破for
上下文。试试这个:
@echo off
for /f %%g in (' tasklist /FI "IMAGENAME eq chrome.exe" ^| find /I /C "chrome.exe" ') do set status=%%g
if %status% EQU 0 goto :notrunning
if %status% GTR 0 goto :problem
:notrunning
echo Program is not running
pause
:problem
If %status% LSS 5 ( echo problem
) else ( echo chrome is fine
)
pause
答案 1 :(得分:0)
尽量避免 if 命令中的 else 语句。您正在使用的Windows版本可能不支持它。尝试删除 else 语句,并使用多个 if 语句。在这里,试试这个:
@echo off
for /f %%g in (' tasklist /FI "IMAGENAME eq chrome.exe" ^| find /I /C "chrome.exe" ') do (
if %%g EQU 0 goto :notrunning
if %%g GTR 0 goto :problem
)
:notrunning
echo Program is not running
pause
:problem
If %%g LSS 5 echo problem
If %%g GTR 4 echo chrome is fine
)
pause
答案 2 :(得分:0)
%%g
时, :problem
超出范围
你需要
if %%g GTR 0 set /a somevar=%%g&goto :problem
...
:problem
If %somevar% LSS 5 ( echo problem
) else ( echo chrome is fine
)