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 /k
usted 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 innecesarios
cmd /k
- También puedes buscar
%errorlevel%
, lo que no implicaif errorlevel x or greater
lo 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
)