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 的语句。

4

2 回答 2

4

你不能像这样对错误级别进行比较操作。试试这个:

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
于 2013-05-27T22:33:10.573 回答
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
于 2013-05-28T05:23:56.467 回答