Batch - echo-Funktion Fehler?
Ich möchte gerne ein Array erstellen und dieses an der jeweiligen Stelle auch direkt ausgeben.
Hier mein Code:
@echo off
setlocal EnableDelayedExpansion
set /a panelsize = 64
set /a counter1 = 0
:loop1
set /a counter1 = counter1 + 1
set gamepanel[%counter1%] = 1
echo !gamepanel[%%counter1]!
if %counter1% LSS %panelsize% goto loop1
endlocal
Was passieren sollte:
Es sollte 64 mal "1" in der Kommandozeile ausgegeben werden.
Stattdessen steht dort:
"Echo ist ausgeschaltet (OFF)".
Was mache ich falsch?
Habe auch schon folgendes probiert:
call echo !gamepanel[%%counter1]!
echo %gamepanel[%counter1%]%
echo %%gamepanel[%counter1%]%%
4 Antworten
so funktioniert es:
@echo off
setlocal enabledelayedexpansion
set /a "panelsize = 64"
set /a "counter1=0"
:loop1
set /a "counter1=counter1 + 1"
set "gamepanel[%counter1%]=1"
echo !gamepanel[%counter1%]!
if %counter1% LSS %panelsize% goto loop1
rem nochmal alle erstellten Pseudo-Arrayelemente anzeigen
rem damit du siest, das sie wirklich gesetzt wurden ;)
set "gamepanel"
pause
Was ist in meinem code anders?
Die Leerzeichen .
- set variable = irgendwas ist etwas anderes als set variable=irgendwas !!!
- ersteres erzeugt eine Variableleerzeichen mit dem Inhalt leerzeichenirgendwas .
- das andere eine Variable mit dem Inhalt irgendwas .
deshalb sollte man auch immer folgende notation verwenden set "variable=inhalt" , dann kann sich auch kein heimliches Leerzeichen in den Inhalt mogeln. set variable=inhaltleerzeichen ist etwas anderes als set variable=inhalt !!!
Set /a sind ignoriert alle Leerzeichen in einer Formel" deshalb klappt auch set /a "variable = variable + zahl"
Folgendes bewirkt exakt das Gleiche:
@echo off
setlocal enabledelayedexpansion
set /a "panelsize = 64"
rem wird dem loop auch lss 64 übergeben ;)
set /a "panelsize-=1"
for /l %%c in (1,1,%panelsize%) do (
set "gamepanel[%%c]=1"
echo !gamepanel[%%c]!
)
set "gamepanel"
pause
@Echo off
Set /a counter = 64
:loop1
Set /a counter = %counter% + 1
If %counter% Gtr 0 echo 1
Goto loop1
pause
sollte dir 64 mal 1 ausgeben ansonsten anschreiben
Oder
@echo off
FOR /L %%i IN (1,1,64) DO echo 1
Pause
Sollte das nicht funktionieren tausche 64 und die 1 in der Mitte bin mir nicht ganz sicher
Fehler 1: (Prozentzeichen an falscher Position)
echo !gamepanel[%counter1%]!
__
Fehler 2: (Variable einmal mit und einmal ohne Leerzeichen)
-> Lösung 1: (für Zahlen)
set /a gamepanel[%counter1%] = 1
-> Lösung 2: (für beliebige Strings)
set "gamepanel[%counter1%]=1"
__
Tipp: (Variable um bestimmten Betrag erhöhen)
set /a counter1 += 1
__
Zusatzinfo: (da du es ja auch mit call statt delayedExpansion probiert hast)
call echo %%gamepanel[%counter1%]%%
funktioniert auch.
Du hast an der ersten counter = counter + 1 die Prozent Zeichen vergessen
beim rechnen mit set /a brauchen Variable nicht explizit mit Prozentzeichen gekennzeichnet werden. set /a arbeitet immer mit Zahlen, ergo ist alles mit Buchstaben eine Variable...
Du hast mein Array einfach entfernt :D Der Sinn des Codes war ein 64 Langes Array mit 1 zu befüllen. Das 1 ausgeben ist nur zum prüfen ob die jeweilige Array-Stelle gefüllt wurde.