Errorlevel in a For loop (batch windows) Errorlevel in a For loop (batch windows) windows windows

Errorlevel in a For loop (batch windows)


Add

setlocal EnableDelayedExpansion

to the start of your script, then use !errorlevel! instead of %errorlevel%

Delayed Expansion will cause variables to be expanded at execution time rather than at parse time

~ http://ss64.com/nt/delayedexpansion.html

The answer to another question that pointed me in the right direction: https://stackoverflow.com/a/6658935/10245


IF ERRORLEVEL returns TRUE if the return code was equal to or higher than the specified errorlevel. In your example, since 0 is lower than 1, the first errorlevel statement will always be true if the actual error code is 0 or above. What you want is to test for errorlevel 1 first.

E.g.:

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)

Another issue is if you want to echo the actual errorlevel from within the for loop. Since variables are resolved before the start of the loop, echoing %errorlevel% will always echo 0. If you want to echo the value at the execution time, you need to modify the snippet like so:

setlocal enabledelayedexpansionfor %%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!)


You can use vbscript,

NumArgs = WScript.Arguments.CountstrComputer="."Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")Set colProcessList = objWMIService.ExecQuery("Select * from Win32_Process")For Each objProcess in colProcessList    For i=0 To NumArgs-1        If InStr( objProcess.Name ,WScript.Arguments(i)  ) > 0 Then            WScript.Echo "found:" & WScript.Arguments(i)        End If     Next Next

Usage:

C:\test>cscript //nologo test.vbs explorer spool svchostfound:svchostfound:svchostfound:svchostfound:svchostfound:svchostfound:explorerfound:svchostfound:spool