批处理 ERRORLEVEL 问题

Posted

技术标签:

【中文标题】批处理 ERRORLEVEL 问题【英文标题】:batch ERRORLEVEL problems 【发布时间】:2013-05-22 18:55:46 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

【参考方案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

【讨论】:

以上是关于批处理 ERRORLEVEL 问题的主要内容,如果未能解决你的问题,请参考以下文章

使用 errorlevel 查找错误的问题

VS 编译后 install报错(error MSB3073)

批处理中ERRORLEVEL的用法

if语句中的ERRORLEVEL无法正常工作[关闭]

errorlevel与 errorlevel 的区别

如何处理调用 sqlplus 的批处理文件中的错误,因为 sqlplus 没有在错误或失败时设置 ERRORLEVEL?