For循环中的错误级别(批处理窗口)

前端之家收集整理的这篇文章主要介绍了For循环中的错误级别(批处理窗口)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有以下windows批处理代码
for %%i in (iidbms iigcc iigcd dmfacp dmfrcp rmcmd qwerty) do (
  tasklist | findstr /i %%i
  echo %errorlevel%
  if %errorlevel% == 0 (echo %%i ok process found %errorlevel%)
  if %errorlevel% == 1 (echo %%i no process found %errorlevel%)
)

但是它并没有像我预期的那样工作。

所有的名称进程iidbms,iigcc,iigcd,dmfacp,dmfrcp,rmcmd都是真实的,它们被发现,而qwerty是一个发明的,不应该找到它,所以应该打印“没有进程找到1”,但它不,它始终打印0。

但是我注意到,如果我运行任务列表| findstr / i qwerty从dos提示符,就在%errorlevel%= 1之后。

什么样的答案可以或更好?

如果返回码等于或高于指定的错误级别,则IF ERRORLEVEL返回TRUE。在您的示例中,由于0低于1,所以如果实际的错误代码为0或更高,则第一个错误级别语句将始终为真。你想要的是首先测试错误级别1。

例如。:

for %%i in (iidbms iigcc iigcd dmfacp dmfrcp rmcmd qwerty) do (
    tasklist | findstr /i %%i
    if errorlevel 0 if not errorlevel 1 echo process
    if errorlevel 1 if not errorlevel 2 echo process not found
)

另一个问题是如果你想回应在for循环中的实际的错误级别。由于在循环开始之前解析变量,所以回显%errorlevel%将始终为0。如果要在执行时回显该值,则需要修改代码段:

setlocal enabledelayedexpansion
for %%i in (iidbms iigcc iigcd dmfacp dmfrcp rmcmd qwerty) do (
    tasklist | findstr /i %%i
    if errorlevel 0 if not errorlevel 1 echo %%i ok process found !errorlevel!
    if errorlevel 1 if not errorlevel 2 echo %%i no process found !errorlevel!
)
原文链接:https://www.f2er.com/windows/372334.html

猜你在找的Windows相关文章