-heny-
Goto Top

Abfrage von Variable (User-Input)

Hallo,

ich habe ein kleines Problem mit einem Skript, welches den User erst einer Variable einen Wert zuweisen lässt (SET /p) und diesen daraufhin abfragt. Je nach Usereingabe sollen unterschiedliche Aktionen durchgeführt werden.

Beispiel #1 (funktioniert problemlos)
        :settingsmenu
        set /p menupoint=!%lang%inputmenupoint!
        if "%menupoint%"=="1" goto languagemenu  
        if "%menupoint%"=="2" goto teamnamesmenu  
        if "%menupoint%"=="3" goto leaguelabelsmenu  
        if /i "%menupoint%"=="B" goto mainmenu  
        echo.
        echo !%lang%invalidinput!
        echo.
        pause
        goto settingsmenu

Im ersten Beispiel funktioniert alles so, wie ich es möchte. Weist der User der Variable den Wert "1" zu, so geht es zur Sprungmarke "languagemenu", bei "2" zu "teamnamesmenu", bei "3" zu "leaguelabelsmenu" und bei "B" zur Sprungmarke "mainmenu". Wird ein anderer Wert bei der Userabfrage eingegeben, so wird dem User auf dem Bildschirm mitgeteilt, dass er eine valide Eingabe zu machen hat. Auch beim Wert "", also einer leeren Eingabe, wird die Sprungmarke "settingsmenu" samt Fehlermeldung (s. echo's) aufgerufen.

Beispiel #2 (funktioniert nicht komplett)
        set /p menupoint=!%lang%inputmenupoint!
        if "%menupoint%"=="1" (  
            call :editcfgline settings.cfg 6 lang=leng
            goto languagemenu
        )
        if "%menupoint%"=="2" (  
            call :editcfgline settings.cfg 6 lang=lger
            goto languagemenu
        )
        if /i "%menupoint%"=="B" goto settingsmenu  
        echo.
        echo !%lang%invalidinput!
        echo.
        pause
        goto languagemenu

Im zweiten Beispiel funktioniert der erste Teil auch problemlos. Bei einer Eingabe von "1" führt er den Inhalt der Bedingungsgruppierung durch, ebenso bei der Zuweisung "2". Die Eingabe von "B" resultiert, wie gewünscht, in einem Aufruf der Sprungmarke "settingsmenu". Gibt der User andere Buchstaben/Eingaben ein, so wird die Fehlermeldung auf dem Bildschirm angezeigt und die Sprungmarke "languagemenu" aufgerufen. So weit, so gut. Weist der User der Variable allerdings keinen Inhalt zu, also "", so reagiert das Skript mit einem Aufruf der Sprungmarke "languagemenu", allerdings ohne Ausgabe der Fehlermeldung (s. echo's). Entferne ich die beiden If-Gruppierungen aus dem Skript, so funktioniert alles tadellos.

Woran liegt dies? Verzögerte Erweiterungen sind in der Batch-Datei natürlich aktiviert, wobei die !%lang%xyz!-Variablen eingelesene Strings aus einer Textdatei repräsentieren.

Gruß,
heny

Content-Key: 82325

Url: https://administrator.de/contentid/82325

Printed on: April 18, 2024 at 08:04 o'clock

Member: -heny-
-heny- Mar 05, 2008 at 00:32:08 (UTC)
Goto Top
Wie ich herausgefunden habe scheint das Problem damit zusammenzuhängen, dass die Befehle der IF-Abfragen IMMER ausgeführt werden, egal ob die Bedingung zutrifft oder nicht. Es scheint daran zu liegen, dass die Variable nicht definiert ist, wenn man ihr "" zuweist. Warum dann die Befehle innerhalb der IF-Gruppierungen dennoch ausgeführt werden ist mir nicht ersichtlich.

Einen Workaround kann man schaffen, indem man die Variable vor der Userabfrage vordefiniert, z.B.:

        set menupoint=UNDEFINED
        set /p menupoint=!%lang%inputmenupoint!

Gruß,
heny
Member: Biber
Biber Mar 05, 2008 at 11:48:49 (UTC)
Goto Top
Hmm, -heny-,

Woran liegt dies? Verzögerte Erweiterungen sind in der Batch-Datei natürlich aktiviert, ...

Vielleicht ist das das Problem.
Hast Du evtl diese Batch-Datei über eine weitere Instanz der CMD.exe mit "cmd /v:on dieseBatch.bat" aufgerufen?

Anders gefragt: steht explizit ein "...setlocal EnableDelayedExpansion" am Anfang der Batchdatei?

Grüße
Biber
Member: -heny-
-heny- Mar 05, 2008 at 16:33:18 (UTC)
Goto Top
Ich habe nun probiert, die Batch-Datei mit ausgeschalteten verzögerten Erweiterungen laufen zu lassen. Dies resultiert im gleichen Verhalten.

[...]
    setlocal EnableDelayedExpansion
[...]

Ich nutze obigen Befehl nicht in der ersten Zeile (also z.B. "@echo off & setlocal EnableDelayedExpansion"), sondern erst ein paar Zeilen später. Das hat aber keine Auswirkungen, da vorher nur Kommentare stehen.

Gruß,
heny
Member: Biber
Biber Mar 06, 2008 at 06:38:13 (UTC)
Goto Top
Moin -heny-,

kann so auch die Fehlerursache nicht erkennen.
Wenn Du willst, dann sende mal den Batchschnipsel im Original an meine im Profil angegebene Mailaddresse.

Grüße
Biber