Andernfalls wird die Bedingung immer ausgeführt ... Was habe ich falsch gemacht?

Andernfalls wird die Bedingung immer ausgeführt ... Was habe ich falsch gemacht?

Ich versuche, dieses Ding zum Laufen zu bringen, aber aus irgendeinem Grund scheint es die else-Anweisung nicht zu beachten, obwohl ich denke, dass es richtig ist. Infolgedessen ist es so, als gäbe es kein else und es werden einfach alle Codezeilen ausgeführt. Der Zweck besteht darin, zu prüfen, ob etwas ausgeführt wird. Wenn dies der Fall ist, soll eine Meldung angezeigt und das Befehlsfenster geöffnet bleiben, damit man sehen kann, was getan werden muss, um das Problem zu beheben. Wenn dann eine Taste gedrückt wird, schließt sich das Befehlsfenster. Falls es nicht ausgeführt wird, wird es für sie gestartet und das Befehlsfenster geschlossen, damit man es nicht sehen kann.

Hier ist die Ausgabe, die zeigt, was passiert (Leerzeilen wurden entfernt, um Platz zu sparen):

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

Und hier ist der Code:

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

Antwort1

  • Damit cmd /kerzeugen Sie eine neue Instanz von cmd.exe im selben Fenster.
  • der Fehlerlevel in dieser neuen cmd.exe bezieht sich auf den Start von cmd.exe selbst, was offensichtlichWarerfolgreich, daher ist der Fehlerlevel 0
  • Entfernen Sie einfach alle unnötigencmd /k
  • Sie können auch nach suchen %errorlevel%, was nicht impliziert, if errorlevel x or greaterwas Ihre Syntax bewirkt.

Ohne Ihren QPROCESS zu kennen, können Sie die bedingte Ausführung bei Fehler ||oder Erfolg verwenden && , siehehttps://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
)

verwandte Informationen