De lo contrario, la condición siempre se ejecuta... ¿Qué tengo mal?

De lo contrario, la condición siempre se ejecuta... ¿Qué tengo mal?

Estoy tratando de hacer que esto funcione, pero por alguna razón, aunque creo que es correcto, no parece respetar la declaración else. Como resultado, es como si no hubiera nada más y simplemente ejecuta todas las líneas de código. El propósito es verificar si algo se está ejecutando. Si es así, se supone que debe mostrar un mensaje y dejar la ventana de comando abierta para que uno pueda ver qué se debe hacer para solucionarlo, luego, cuando se presiona una tecla, la ventana de comando se cierra. En caso de que no se esté ejecutando, lo iniciará y cerrará la ventana de comandos para que no se pueda ver.

Aquí está el resultado para mostrar lo que está sucediendo (se eliminaron las líneas en blanco para ahorrar espacio):

C:\Users\me2\Desktop>QPROCESS "Pulse.exe" 1>NUL No Process exists for pulse.exe
C:\Users\me2\Desktop>REM 0 means that it's running (ProcessFound) and 1 mean s it's not (ProcessNotFound)
C:\Users\me2\Desktop>REM cmd /k IF (1 EQU 0 goto ProcessFound) ELSE (goto Pr ocessNotFound)
C:\Users\me2\Desktop>REM cmd /k IF 1 NEQ 0 (
C:\Users\me2\Desktop>cmd /k IF ERRORLEVEL 1 (
C:\Users\me2\Desktop>echo In ProcessNotFound In ProcessNotFound
C:\Users\me2\Desktop>REM cd C:\Program Files (x86)\Common Files\Pulse Secure \JamUI\
C:\Users\me2\Desktop>REM start "" Pulse.exe -tray
C:\Users\me2\Desktop>echo In ProcessFound In ProcessFound
C:\Users\me27\Desktop>REM cls 0
Pulse Secure is running. It must be stopped by right clicking on the icon and clicking Exit.
Press any key to continue . . .

Y aquí está el código:

QPROCESS "Pulse.exe">NUL
REM 0 means that it's running (ProcessFound) and 1 means it's not (ProcessNotFound)
REM cmd /k IF (%ERRORLEVEL% EQU 0 goto ProcessFound) ELSE (goto ProcessNotFound)
REM cmd /k IF %ERRORLEVEL% NEQ 0 (
cmd /k IF ERRORLEVEL 1 (
     :ProcessNotFound
     echo In ProcessNotFound
     REM cd C:\Program Files (x86)\Common Files\Pulse Secure\JamUI\
     REM start "" Pulse.exe -tray
) ELSE (
     :ProcessFound
     echo In ProcessFound
 REM    cls
     @echo off
     echo %ERRORLEVEL%
     ECHO.
     ECHO.
     ECHO Pulse Secure is running.
     ECHO It must be stopped by right clicking on the icon and clicking Exit.
     ECHO.
     ECHO.
     PAUSE
     )
REM IF %ERRORLEVEL% EQU 0 ECHO "Pulse Secure is running.  It must be stopped by right clicking on the icon and clicking Exit."

Respuesta1

  • Con cmd /kusted está generando una nueva instancia de cmd.exe en la misma ventana.
  • El nivel de error en este nuevo cmd.exe se refiere al inicio del propio cmd.exe, lo que obviamenteeraexitoso, por lo que el nivel de error es 0
  • simplemente elimine todos aquellos innecesarioscmd /k
  • También puedes buscar %errorlevel%, lo que no implica if errorlevel x or greaterlo que hace tu sintaxis.

Sin conocer su QPROCESS, puede utilizar la ejecución condicional en caso de error ||o éxito && . Consultehttps://ss64.com/nt/syntax-conditional.html

QPROCESS "Pulse.exe" >NUL 2>&1 || (
    echo In ProcessNotFound
    REM cd C:\Program Files (x86)\Common Files\Pulse Secure\JamUI\
    REM start "" Pulse.exe -tray
) && (
    echo In ProcessFound
    echo %ERRORLEVEL%
    ECHO.
    ECHO Pulse Secure is running.
    ECHO It must be stopped by right clicking on the icon and clicking Exit.
    ECHO.
    PAUSE
)

información relacionada