Else 조건은 항상 실행됩니다... 무엇이 잘못되었나요?

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 자체의 시작을 나타냅니다.~였다성공했으므로 오류 수준은 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
)

관련 정보