【问题标题】: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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多