
118551
22.02.2015
Probleme Im Batch Menü
Hallo Leute ich wollte nur ein (Batch Spiel) Programmieren
dabe tratt das problemm auf
"set" kann syntaktisch an dieser Stelle nicht verarbeitet werden.
Wenn ich bei den IF´s wie im code es versuche kommt es beim zweiten mal w oder s drücken
Wenn ich bei den IF´s es so versuche if %L%==^^^<----- dann kommt es direkt wenn ich w oder s drücke
Wenn ich die ^ ganz weglasse geht es erst recht nicht
Kann mir einer Helfen
Danke im Vorraus
dabe tratt das problemm auf
"set" kann syntaktisch an dieser Stelle nicht verarbeitet werden.
@echo off
set B=^^^<-----
set L=
set E=
:Start
echo Wilkommen zu Unnamed-Game
echo.
echo Neues Spiel Beginnen %B%
echo SpielStand Laden %L%
echo Beenden %E%
echo --------------------------
choice /n /c:wse
if errorlevel 255 goto Start
if errorlevel 3 goto Bestaetigen
if errorlevel 2 goto Runter
if errorlevel 1 goto Hoch
if errorlevel 0 goto Start
:Hoch
if %B%==^<----- set B= && set L= && set E=^^^<----- && cls && goto Start
if %L%==^<----- set B=^^^<----- && set L= && set E= && cls && goto Start
if %E%==^<----- set B= && set L=^^^<----- && set E= && cls && goto Start
:Runter
if %B%==^<----- set B= && set L=^^^<----- && set E= && cls && goto Start
if %L%==^<----- set B= && set L= && set E=^^^<----- && cls && goto Start
if %E%==^<----- set B=^^^<----- && set L= && set E= && cls && goto Start
:Bestaetigen
if %B%==^<----- call New-Game.bat
if %L%==^<----- call Load-Game.bat
if %E%==^<----- exit
Wenn ich bei den IF´s wie im code es versuche kommt es beim zweiten mal w oder s drücken
Wenn ich bei den IF´s es so versuche if %L%==^^^<----- dann kommt es direkt wenn ich w oder s drücke
Wenn ich die ^ ganz weglasse geht es erst recht nicht
Kann mir einer Helfen
Danke im Vorraus
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 264230
Url: https://administrator.de/forum/probleme-im-batch-menue-264230.html
Ausgedruckt am: 22.04.2025 um 04:04 Uhr
5 Kommentare
Neuester Kommentar
Hallo DomiZone1,
ich weiß wirklich nicht, warum du so ein kryptisches Zeug als Variablenwert setzen musst, ist aber letztlich nicht der Grund für den Fehler. Irgendwann (vermutlich "beim zweiten mal w oder s drücken") ist eine deiner Variablen beim Vergleich nicht definiert. Sagen wir mal %B% würde zu einem leeren String expandiert werden, dann sieht dein Vergleich etwa so aus:
Wen du dich hier im Forum mal umsiehst, wirst du kaum jemanden finden, der beim Setzen einer Variablen oder bei nicht-numerischen Vergleichen ohne Anführungszeichen arbeitet. Dann fällt dieser ganze Escape Quatsch weg. In deinem Fall gäbe es übrigens auch noch ein
Grüße
rubberman
ich weiß wirklich nicht, warum du so ein kryptisches Zeug als Variablenwert setzen musst, ist aber letztlich nicht der Grund für den Fehler. Irgendwann (vermutlich "beim zweiten mal w oder s drücken") ist eine deiner Variablen beim Vergleich nicht definiert. Sagen wir mal %B% würde zu einem leeren String expandiert werden, dann sieht dein Vergleich etwa so aus:
if ==<----- set...
IF DEFINED
um zu prüfen, ob eine Variable definiert ist (einen Wert hat).Grüße
rubberman
Hallo DomiZone1.
Teste:
Fehlermeldung:
Schau doch einfach mal in deinen Code. Sowohl in Zeile 22, wie auch in Zeile 27 wird B negiert bzw. der Wert auf ein Leerzeichen reduziert (was den selben Fehler hervorruft), da du ein Leerzeichen zwischen = und && stehen hast. Eine dieser Zeilen wird aber beim 2. Durchlauf aufgerufen. Somit kann dein Code nur krachen gehen.
Teste:
Erstaunlicherweise wird der Wert ganz ohne Escapesequenzen fehlerfrei gesetzt.
Ebenso wird ein
keinen Fehler verursachen wenn B nicht definiert ist oder nur ein Leerzeichen enthält.
Alles Dinge, die man erst einmal probiert, bevor man erklärt, dass das alles Unsinn ist und man das ja schon immer anders gemacht hat

Grüße
rubberman
Das ein vergleich dann so aussieht ist ausgeschlossen!
Da bist du so was von auf dem Holzweg.Teste:
set B=
if %B%==X set Y=Z
"set" kann syntaktisch an dieser Stelle nicht verarbeitet werden.
zu deiner sache mit den ohne die " arbeiten das mach ich schon seit ewigkeiten so
Und deshalb ist es automatisch richtig?Teste:
set "B=<-----"
Ebenso wird ein
if "%B%"=="X" set "Y=Z"
Alles Dinge, die man erst einmal probiert, bevor man erklärt, dass das alles Unsinn ist und man das ja schon immer anders gemacht hat
evtl kannst du mir mal ein link geben
Brauchst du ja nun nicht mehr Grüße
rubberman
Wenn ich es so mache set "B=<-----" kommt:
Das System kann die angegebene Datei nicht finden.
Joa, wenn du es mit ECHO ausgibst, nicht beim SET. Das wiederum hättest du gesehen, wenn du ECHO ON gesetzt hättest und die ganzen CLSs rausgeschmissen hättest. Die kannst du immer noch rein schreiben, wenn der Code mal läuft.Das System kann die angegebene Datei nicht finden.
Also
set "B=^<-----"
sollte es dann auch für deinen Zweck tun.zweitens du kennst wohl den choice befehl noch nicht oder hast den code nicht wirklich gelesen
Hehe, so so. Ich kannte den CHOICE Befehl schon, als er noch eine ganz andere Syntax hatte und bevor er mit XP vorübergehend verschwunden war, um mit Vista wieder aufzutauchen. Und natürlich habe ich deinen Code gelesen und weiß was er tun soll. Anders hätte ich dich wohl kaum auf deine Fehler aufmerksam machen können.Was passiert den nun, wenn du jeweils beide Vergleichsoperanden in Anführungszeichen setzt?
Im übrigen arbeite ich mit (Windows 7 HomePremium 64 bit) nur damit du nicht mit win8 oder anderen versionen arbeitest und da gehts dann auf einmal
Hat damit überhaupt nichts zu tun.BTW: Da du ja immer noch glaubst, mit Batch Spiele schreiben zu wollen, dann lass mich auch mal ein Spielchen machen, wie ein Menü aussehen könnte:
@echo off &setlocal
:: *** BENUTZERDEFINIERTE EINSTELLUNGEN ***
:: Menütitel
set "headline=SYSTEM-PROGRAMME"
:: Menüpunkte, in Anführungszeichen und kommagetrennt:
set items="Eingabeaufforderung","Editor","Rechner","Windows-Explorer","Zeichentabelle"
:: Menüzeile, die beim Start markiert sein soll
set /a "c=1"
:: Farbkombination für die Markierung der Menüpunkte
set "col=4e"
:: Tasten zum Navigieren nach oben und unten
set "up=W"
set "down=S"
::~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:: *** ASSOZIATIVES ARRAY ANLEGEN ***
set /a "n=0"
for %%i in (%items%) do (
set /a "n+=1"
setlocal EnableDelayedExpansion
for %%j in (!n!) do (
endlocal
set "menitem_%%j= %%~i "
)
)
:: *** VARIABLE UND DATEI FÜR FARBIGE AUSGABE ANLEGEN ***
call :initColorPrint
:: *** HAUPTSCHLEIFE FÜR DAS ANZEIGEN DES MENÜS ***
:loop
cls
echo(&echo *** %headline% ***&echo(
echo nach oben: [%up%] nach unten: [%down%] bestaetigen: [Enter]
echo(&echo(
setlocal EnableDelayedExpansion
for /l %%i in (1 1 %n%) do (
if %c%==%%i (call :colorPrintVar %col% menitem_%%i&echo() else echo !menitem_%%i!
)
endlocal
call :getchoice "%up%%down%"
set "ret=%errorlevel%"
if %ret%==2 (
if %c%==%n% (set /a "c=1") else set /a "c+=1"
goto loop
) else if %ret%==1 (
if %c%==1 (set /a "c=n") else set /a "c-=1"
goto loop
)
:: *** TEMPORÄRE DATEI LÖSCHEN ***
call :cleanupColorPrint
echo(
:: *** SUBROUTINE MIT DEM INDEX DES AUSGEWÄHLTEN MENÜPUNKTS AUFRUFEN ***
call :choice_%c%
:: *** PROGRAMM ENDE ***
exit /b
:: *** INTERNE SUBROUTINEN ***
:: Routine für ein CHOICE-ähnliches Verhalten
:getchoice ByVal_Choices
setlocal DisableDelayedExpansion
set "n=0" &set "c=" &set "e=" &set "map=%~1"
for /f "eol=1 delims=" %%i in ('xcopy /lwq "%~f0" :\') do set "c=%%i"
set "c=%c:~-1%"
if defined c (
for /f delims^=^ eol^= %%i in ('cmd /von /u /c "echo(!map!"^|find /v ""^|findstr .') do (
set /a "n += 1" &set "e=%%i"
setlocal EnableDelayedExpansion
if /i "!e!"=="!c!" (
for /f %%j in ("!n!") do endlocal &endlocal &exit /b %%j
)
endlocal
)
) else endlocal &exit /b 0
endlocal &goto getchoice
:: Routinen für farbige Ausgabe von Text
:initColorPrint
for /F "tokens=1,2 delims=#" %%a in ('"prompt $H# &for %%b in (1) do rem"') do set "DEL=%%a"
<nul >"%temp%\x" set /p "=%DEL%%DEL%%DEL%%DEL%%DEL%%DEL%.%DEL%"
exit /b
:colorPrintVar ByVal_Color ByRef_StrVar
if not defined %~2 exit /b
setlocal enableDelayedExpansion
set "str=a%DEL%!%~2:\=a%DEL%\..\%DEL%%DEL%%DEL%!"
set "str=!str:/=a%DEL%/..\%DEL%%DEL%%DEL%!"
set "str=!str:"=\"!"
pushd "%temp%"
findstr /p /A:%1 "." "!str!\..\x" nul
popd
exit /b
:cleanupColorPrint
del "%temp%\x"
exit /b
::~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
:: *** BENUTZERDEFINIERTE SUBROUTINEN choice_1 BIS choice_n (MIT n = ANZAHL MENÜPUNKTE) ***
:choice_1
start "" "%comspec%"
exit /b
:choice_2
start "" "%SystemRoot%\system32\notepad.exe"
exit /b
:choice_3
start "" "%SystemRoot%\system32\calc.exe"
exit /b
:choice_4
start "" /max "%SystemRoot%\explorer.exe" /n,/e,::{20D04FE0-3AEA-1069-A2D8-08002B30309D}
exit /b
:choice_5
start "" "%SystemRoot%\system32\charmap.exe"
exit /b
Zwischen den beiden Linien mit den Tilden solltest du nichts ändern. Der Rest ist ausdrücklich zur Anpassung vorgesehen...
Grüße
rubberman