Иначе условие всегда выполняется... В чем моя ошибка?

Иначе условие всегда выполняется... В чем моя ошибка?

Я пытаюсь заставить эту штуку работать, но по какой-то причине, хотя я и считаю, что она правильная, она, похоже, не учитывает оператор else. В результате получается, что else нет, и она просто выполняет все строки кода. Целью является проверка того, что что-то запущено. Если это так, то она должна вывести сообщение и оставить открытым командное окно, чтобы можно было увидеть, что нужно сделать для исправления, а затем при нажатии клавиши командное окно закрывается. В случае, если она не запущена, она запустит ее для них и закроет командное окно, чтобы ее не было видно.

Вот вывод, демонстрирующий происходящее (пустые строки удалены для экономии места):

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 . . .

А вот и код:

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."

решение1

  • При этом cmd /kвы создаете новый экземпляр cmd.exe в том же окне.
  • уровень ошибки в этом новом cmd.exe относится к запуску самого cmd.exe, что очевиднобылуспешно, поэтому errorlevel равен 0
  • просто удалите все ненужноеcmd /k
  • вы также можете проверить наличие %errorlevel%, что не подразумевает if errorlevel x or greater, что делает ваш синтаксис.

Не зная QPROCESS, вы можете использовать условное выполнение при неудаче ||или успехе && , см.https://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
)

Связанный контент