批处理 ERRORLEVEL 问题

3

我有一个文件,用于检查进程是否正在运行。如果是,则循环执行;如果不是,则将一行文本输出到txt文件中。我的问题是,当进程没有运行时,它仍然继续循环。以下是我的代码:

:a
Tasklist /v | findstr CMD.exe | findstr LAN 
If ERRORLEVEL==1 goto :done
Goto :a

:done

Echo %USERNAME% has logged out. >>log.txt

我觉得我可能在处理ERRORLEVEL时出了些问题,尽管我已经使用if和if not语句测试了0-2的errorlevel。

2个回答

5

您不能像那样使用errorlevel进行比较操作。尝试使用以下方式:

If ERRORLEVEL 1 goto :done

或者

if %errorlevel% == 1 goto :done

或者

if %errorlevel% EQU 1 goto : done

当你使用FIND或FINDSTR时,需要加上引号:

Tasklist /v | findstr "CMD.exe" | findstr "LAN" 

你可以使用条件执行:

您还可以使用条件执行:

Tasklist /v | find "CMD.exe" | find "LAN" || goto :done

2

你可能遇到的问题是CMD.exe是一个区分大小写的测试,而它没有通过过滤器。/i开关将使两个findstr测试不区分大小写。

尝试这样做:如果未找到cmd.exe和lan,则会分支到:a。

:a
Tasklist /v | findstr /i "CMD.exe" | findstr /i "LAN" >nul
If ERRORLEVEL 1 goto :a

Echo %USERNAME% has logged out. >>log.txt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接