Se puede hacer, por supuesto, con una correcta anidación de Ifs (esto es, meter un If dentro de otro, nada de usar Else If, eso ya ha quedado claro que no es posible), pero queda muy feo.
Si quieres comprobar si ambos procesos se encuentran activos al mismo tiempo, para no enbrutecer demasiado el código resultante podrías hacerlo de la siguiente manera:
Lo que hago es declarar una variable "exitCodeCount" que servirá para determinar si ambos procesos están activos basándose en la suma de los códigos de salida de las subrutinas "CheckGUI" y "CheckCLI", si ambas llamadas a "CheckGUI" y "CheckCLI" devuelven "0" (0+0) entonces significa que ambos están activos, si devuelve "1" (0+1), que uno de los procesos se encuentra inactivo, y si devuelve "2" (1+1) significa que ningún proceso está activo.
Saludos!
Si quieres comprobar si ambos procesos se encuentran activos al mismo tiempo, para no enbrutecer demasiado el código resultante podrías hacerlo de la siguiente manera:
Código (dos) [Seleccionar]
@Echo OFF & (CHCP 1252)1>&2>NUL
SetLocal EnabledelayedExpansion
:Loop
Set /A "exitCodeCount=0"
(Call :CheckGUI) & (Set /A "exitCodeCount+=!ERRORLEVEL!")
(Call :CheckCLI) & (Set /A "exitCodeCount+=!ERRORLEVEL!")
If "!exitCodeCount!" EQU "0" (
Echo:Ambos procesos están activos.
) Else (
If "!exitCodeCount!" EQU "1" (
Echo:Al menos uno de los procesos está inactivo.
) Else ( :: "!exitCodeCount!" EQU "2"
Echo:Ninguno de los procesos está activo.
)
)
(TimeOut /T 1 /NoBreak)1>&2>NUL
GoTo :Loop
:CheckGUI
(TaskList.exe /FI "IMAGENAME eq openvpn-gui.exe" | findstr "openvpn-gui.exe")1>&2>NUL
Exit /B "%ERRORLEVEL%"
:CheckCLI
(TaskList.exe /FI "IMAGENAME eq openvpn.exe" | findstr "openvpn.exe")1>&2>NUL
Exit /B "%ERRORLEVEL%"
Lo que hago es declarar una variable "exitCodeCount" que servirá para determinar si ambos procesos están activos basándose en la suma de los códigos de salida de las subrutinas "CheckGUI" y "CheckCLI", si ambas llamadas a "CheckGUI" y "CheckCLI" devuelven "0" (0+0) entonces significa que ambos están activos, si devuelve "1" (0+1), que uno de los procesos se encuentra inactivo, y si devuelve "2" (1+1) significa que ningún proceso está activo.
Saludos!