Programmierhilfe - Rechenoperationen in BATCH?
Hallo, ich habe ein kleines Programm in Batch geschrieben, aber als Ausgabe bekomme ich immer "Fehlender Operator". Vielleicht ist hier jemand, der mir meinen Fehler verraten kann
- set A = 3
- set B = 5
- set /a AB = %A%%B%
- set /a Y = %ZAHL% %% %A%
- set /a Z = %ZAHL% %% %B%
- set /a YZ = %ZAHL% %% %AB%
1 Antwort
Batch ist etwas "speziell" was Variablennamen angeht.
- VariablenNamen im Batch dürfen Leerzeichen enthalten!
- Es ist ein Unterschied ob man schreibt x=3 oder x =3.
- Gleiches gilt für die rechte Seite der Zuweisung x=3 ist etwas anderes als x= 3
- Damit man nicht aus Versehen am Ende einer Variablenzuweisung ein Leerzeichen hat, sollte man immer Anführungszeichen um einen set-Term setzen!
- Die Groß- und Kleinschreibung ist hingegen egal, außer bei Laufvariablen in For-schleifen %%a und %%A sind unterschiedliche Variablen
- Auch wenn ich hier deine einbuchstabigen Variablennamen übernommen habe, sollten normale mit set gesetzte Variablen immer mindestens 2 Buchstaben haben (Verwechslungsgefahr mit Laufvariablen).
- Variablen dürfen nicht mit einer Zahl beginnen. man kann sie zwar setzen, jedoch nicht darauf zugreifen. (geht schon, aber nicht für Anfänger)
- Bei set /a dürfen sehrwohl rechts vom "=" Leerzeichen sein.
- Man kann sogar bei set /a auf die Prozentzeichen für Variablen verzichten, da Buchstaben nur eine Variable sein können
so ist es richtig:
set "A = 99"
set "A=3"
set "B=5"
set "Zahl=55"
echo Zahl=%Zahl%, A=%A%, B=%B%
echo aber... A =(%A %) ...und auch noch ein Leerzeichen vor der Zahl
set /a "AB =%A% + %B%"
set /a "Y= %ZAHL% %% %A%"
set /a "Z= %ZAHL% %% %B%
set /a "YZ= %ZAHL% %% %AB%"
echo AB=%ab% , Z=%Z% , YZ=%yz%
set /a "blubbb= z - yz"
echo blubbb ist %blubbb%
rem auch das geht:
set /a "zahl1=100 , zahl2=zahl1 * 5 , ergebniss= zahl2 / zahl1"
echo %ergebniss%
pause
PS:
Verzichte auf Bindestriche in Variablenamen, das könnte ungeahnte Folgen haben....
set "a1=333"
set "b1=66"
set "a1-b1=25
echo %a1-b1%
set /a "summe=5 + a1-b1"
echo %summe%
pause
Irgendwie macht deine Schleife keinen Sinn!
Was nutzt es wenn ich etwas erklare und Du machst die gleichen Fehler weiter?
Zwischen einem Variablennamen und = darf kein Leerzeichen sein!
set "%ZAHL% = 1" ist totaler Murks , das setzt den Variablennamen auf eine Zahl, was nicht sein darf!
%fizz% und %buzz% verändern sich nicht und werden nie Null
sie mal im debuggModus (ohne @echo off) was mit den variablen passiert :
set "fizz=3"
set "buzz=5"
set /a "fizzbuzz= %fizz% * %buzz%"
set "ZAHL=1"
:loop
set /a "Y= %ZAHL% %% %fizz%"
set /a "Z= %ZAHL% %% %buzz%
set /a "YZ= %ZAHL% %% %fizzbuzz%"
rem hier wird nie die eine Forderung erfüllt, da die Variablen sich nie verändern...
if /I "%fizzbuzz%" == "0" (
echo FIZZBUZZ
) else (
if /I "%fizz%" == "0" (
echo FIZZ
) else (
if /I "%buzz%" == "0" (
echo BUZZ
) else (
echo 1
)
)
)
rem das X macht keinen Sinn x wird nie abgefragt!
set /a "X= %ZAHL% + 1"
rem diese pause brmst die Schleife... kann weg wenn alles klappt
pause
goto loop
so wird ein Schuh draus:
@echo off
set "fizz=3"
set "buzz=5"
set /a "fizzbuzz= %fizz% * %buzz%"
set "ZAHL=1"
:loop
set /a "Y= %ZAHL% %% %fizz%"
set /a "Z= %ZAHL% %% %buzz%
set /a "YZ= %ZAHL% %% %fizzbuzz%"
rem jetzt fragen wir die zu den Operanten gehörenden Ergebnisvariablen ab und dann klap
pt es ;)
if /I "%YZ%" == "0" (echo FIZZBUZZ
) else (
if /I "%Y%" == "0" (echo FIZZ
) else (
if /I "%Z%" == "0" (echo BUZZ
) else (
echo Zahl=%Zahl%
)
)
)
rem statt des X erhöhen wir Zahl, was das einzig logische ist, wenn wir wenn Variablen durch eine Modulooperation regelmäßig 0 werden sollen
set /a "Zahl+=1"
rem damit das ganze nicht durchrast...
timeout 1 >nul
goto loop
Jetzt werden die richtigen Variablen verglichen un eine Entscheidung herbeizuführen.
Keine Ahnung wo Du Deine Logik geparkt hattest :p
Ps vergiss nicht die Arbeit zu würdigen ! dafür gibt es die Daumen- , danke- und hilfreichknöpfe
War hier länger nicht mehr online :D Ich bedanke mich definitiv für die Arbeit und den Zeitaufwand ^^ Hat jetzt alles prima geklappt :D
hier ist das "Programm" , was ich geschrieben habe. Ich habe es bereits zum laufen gebracht, da habe ich direkt die Werte 3 und 5 hinter das %% gesetz. aber ich möchte, dass man über variablen steuern kann :D Leider funktioniert das immer noch nicht :/