批处理 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 问题的主要内容,如果未能解决你的问题,请参考以下文章
VS 编译后 install报错(error MSB3073)
如何处理调用 sqlplus 的批处理文件中的错误,因为 sqlplus 没有在错误或失败时设置 ERRORLEVEL?