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)
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)
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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 82325
Url: https://administrator.de/contentid/82325
Ausgedruckt am: 23.11.2024 um 03:11 Uhr
4 Kommentare
Neuester Kommentar
Hmm, -heny-,
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
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