Batch - echo-Funktion Fehler?

4 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

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
Woher ich das weiß:eigene Erfahrung – Ich mach das seit 30 Jahren
MrAmazing2 
Fragesteller
 19.11.2018, 15:55

Perfekt, sehr hilfreich, danke dir :D

0

@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
Woher ich das weiß:eigene Erfahrung
MrAmazing2 
Fragesteller
 19.11.2018, 15:50

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.

0

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

Erzesel  19.11.2018, 17:54

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...

1