2013-05-27 80 views
3

我有一个文件,用于检查进程是否正在运行。如果是的话,那么它会循环,如果没有,它会将一个行回显到一个txt文件中,我的问题是当进程没有运行时它仍然继续循环。这里是我的代码批处理ERRORLEVEL问题

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

:done 

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

我觉得我做错了什么与ERRORLEVEL althought我受够了,如果,如果不是0-2 errorlevels语句尝试过。

回答

4

你不能让这与像that.Try ERRORLEVEL比较操作:

If ERRORLEVEL 1 goto :done 

if %errorlevel% == 1 goto :done 

if %errorlevel% EQU 1 goto : done 

而当你使用查找或FINDSTR你需要报价:

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

您还可以使用条件执行:

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

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

试试这个:它会跳转到:一,如果CMD.EXE和局域网都没有发现。

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

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