IF / Else和Goto问题

我一直在努力拼凑这个批处理脚本来检查一个进程(它可以是任何进程)。 统计正在运行的实例的数量并保存该计数的输出。 如果它没有运行(计数为0),那么它的罚款,但如果它正在运行(1或更大),但在这种情况下说'5'有它回声明。

每次我尝试这样做,我要么得到“其他”不被识别为内部或外部命令,可操作的程序或batch file或当脚本到达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 

任何goto打破上下文。 尝试这个:

 @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 

尽量避免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 

当达到标签:problem时, %%g超出范围

你需要

 if %%g GTR 0 set /a somevar=%%g&goto :problem 

 :problem If %somevar% LSS 5 ( echo problem ) else ( echo chrome is fine )