我有一个文件检查进程是否正在运行。如果是,那么它循环,如果不是它将一行回显到一个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。
答案 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