【问题标题】:batch ERRORLEVEL problems批处理 ERRORLEVEL 问题
【发布时间】: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。
【问题讨论】:
标签:
batch-file
cmd
windows-xp
【解决方案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