批处理ERRORLEVEL问题

时间:2013-05-27 22:24:09

标签: batch-file cmd windows-xp

我有一个文件检查进程是否正在运行。如果是,那么它循环,如果不是它将一行回显到一个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语句,错误级别为0-2。

2 个答案:

答案 0 :(得分:4)

你不能像那样使用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

答案 1 :(得分:2)

您的问题可能是CMD.exe是区分大小写的测试,并且没有通过过滤器传递。 / i开关将使两个findstr测试不区分大小写。

试试这个:它将分支到:如果找不到cmd.exe和lan。

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

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