IF/Else 和 Goto 问题

IF/Else and Goto issues

我一直在努力尝试将这个批处理脚本放在一起来检查一个进程(它可以是任何进程)。计算它正在运行的实例数并保存该计数的输出。如果它没有运行(计数为 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

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

任何 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
当您到达标签 :problem

时,

%%g 超出范围

你需要

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

...

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