批处理错误级别问题

cmd*_*cmd 3 windows-xp cmd batch-file

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

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

:done

Echo %USERNAME% has logged out. >>log.txt
Run Code Online (Sandbox Code Playgroud)

我认为我在 ERRORLEVEL 上做错了,尽管我已经尝试过使用错误级别为 0-2 的 if 和 if not 语句。

npo*_*aka 5

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

If ERRORLEVEL 1 goto :done
Run Code Online (Sandbox Code Playgroud)

或者

if %errorlevel% == 1 goto :done
Run Code Online (Sandbox Code Playgroud)

或者

if %errorlevel% EQU 1 goto : done
Run Code Online (Sandbox Code Playgroud)

当您使用 FIND 或 FINDSTR 时,您需要引号:

Tasklist /v | findstr "CMD.exe" | findstr "LAN" 
Run Code Online (Sandbox Code Playgroud)

您还可以使用条件执行:

Tasklist /v | find "CMD.exe" | find "LAN" || goto :done
Run Code Online (Sandbox Code Playgroud)