2016-05-09 5 views
0

Ich weiß, dass es bessere Möglichkeiten gibt, mit einer anderen Sprache zu arbeiten. Obwohl ich das im Batch machen muss. Nicht einmal Powershell. Ja, ich weiß, das ist 2016. xDBatch - Wenn Else Goto zu dieser Zeit unerwartet war

ist

Mein Problem ist, „Goto war zu dieser Zeit Unexpected“

Ich weiß nicht, ob dies möglich ist, aber ich bin sicher, dass es ist.

:START_CMD 
COLOR 02 & CLS & TITLE COMMAND WINDOW 
ECHO. 
SET /P _act=$ || Set _act=za 
IF /I [%_act%]==[exit] (
GOTO :LOCK 
) ELSE (
IF /I [%_act%]==[lock] (
GOTO :LOCK 
) ELSE (
IF /I [%_act%]==[login] (
GOTO :UNLOCK_L1 
) ELSE (
IF /I [%_act%]==[path] (
ECHO. & ECHO Current Path: %universalpath% & ECHO. & PAUSE & CLS & GOTO :START_CMD 
) ELSE (
IF /I [%_act%]==[check] (
GOTO :HELP 
) ELSE (
IF /I [%_act%]==[sudo] (
GOTO :HELP 
) ELSE (
IF /I [%_act%]==[report] (
GOTO :SECURITY_LOGIN 
) ELSE (
IF /I [%_act%]==[help] (
GOTO :HELP 
) ELSE (
IF /I [%_act%]==[whoami] (
GOTO :WHOAMI_NOT_LOGIN 
) ELSE (
SET _act=$_act: =% 
) 

IF /I NOT %_act%==za GOTO :START_CMD 
GOTO :START_CMD 
+2

Der einfachste Weg, etwas wie diese zu debuggen, besteht darin, die Zeilen zu kommentieren und sie dann wieder zu kommentieren, bis Sie den Fehler erhalten. –

+0

@ AllanS.Hansen Dank Ihrer Eingabe und Testen, was Sie gesagt haben. Ich habe einen besseren, effizienteren Weg gefunden. Nur mit ... posted * – PrivateUser

Antwort

0

Oh, wo sind die letzten richtigen Klammern?

:START_CMD 
COLOR 02 & CLS & TITLE COMMAND WINDOW 
ECHO. 
SET /P _act=$ || Set _act=za 
IF /I [%_act%]==[exit] (
    GOTO :LOCK 
) ELSE (
    IF /I [%_act%]==[lock] (
     GOTO :LOCK 
    ) ELSE (
     IF /I [%_act%]==[login] (
      GOTO :UNLOCK_L1 
     ) ELSE (
      IF /I [%_act%]==[path] (
       ECHO. & ECHO Current Path: %universalpath% & ECHO. & PAUSE & CLS & GOTO :START_CMD 
      ) ELSE (
       IF /I [%_act%]==[check] (
        GOTO :HELP 
       ) ELSE (
        IF /I [%_act%]==[sudo] (
         GOTO :HELP 
        ) ELSE (
         IF /I [%_act%]==[report] (
          GOTO :SECURITY_LOGIN 
         ) ELSE (
          IF /I [%_act%]==[help] (
           GOTO :HELP 
          ) ELSE (
           IF /I [%_act%]==[whoami] (
            GOTO :WHOAMI_NOT_LOGIN 
           ) ELSE (
            SET _act=$_act: =% 
           ) 
          ) 
         ) 
        ) 
       ) 
      ) 
     ) 
    ) 
) 

IF /I NOT %_act%==za GOTO :START_CMD 
GOTO :START_CMD 

By the way, denken Sie SET _act=$_act: =% arbeiten können? Es scheint ein einfaches Problem zu sein, findest du?

+0

Vielen Dank für Ihren Beitrag! Ich habe daraus gelernt. Einfache Dinge sind leicht zu übersehen. – PrivateUser

+0

In diesem Fall brauchen wir kein einziges "else" (ja, theoretisch, die 's verbessern Leistung, aber Sie würden nicht den Unterschied von ein paar Millisekunden fühlen) – Stephan

+0

Es ist richtig. Und was ich denke, ist OP, um die Optimierung zu machen. Es ist eine gute Übung. Genau wie die Antwort von OP. Und wir müssen wissen, wo das eigentliche Problem liegt. –

0
IF /I [%_act%]==[exit] GOTO :LOCK 
IF /I [%_act%]==[lock] GOTO :LOCK 
IF /I [%_act%]==[login] GOTO :UNLOCK_L1 
IF /I [%_act%]==[path] ECHO. & ECHO Current Path: %universalpath% & ECHO. & PAUSE & CLS & GOTO :START_CMD 
IF /I [%_act%]==[check] GOTO :HELP 
IF /I [%_act%]==[sudo] GOTO :HELP 
IF /I [%_act%]==[report] GOTO :SECURITY_LOGIN 
IF /I [%_act%]==[help] GOTO :HELP 
IF /I [%_act%]==[whoami] GOTO :WHOAMI_NOT_LOGIN 
IF /I NOT [%_act%]==[za] GOTO :START_CMD 
GOTO :START_CMD 

Dies funktioniert genauso gut und ist effizienter.

Verwandte Themen