Frage von Serius, 10

Stringvergleich in .bat Dateien - Wie geht das richtig?

Hey Leute, habe mal angefangen so ein bisschen zu gucken, was man alles so mit .bat Dateien anstellen kann, aber ich scheitere schon an diesem Beispiel hier:

@echo off
set str = "min"
if "%str%" == "min" ( 
    echo A ist min
)
PAUSE   

Wieso kommt er nicht in die If Verzweigung rein? Er führt einfach direkt "Pause" aus. Obwohl "min" == "min" ist... :x

Bzw habe auch das hier probiert:

@echo off
set str = "min"
if "%str%" == "min" ( 
    echo str ist min
) else (
echo str ist nicht min 
)
PAUSE

Gruß Serius

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von MarkusGenervt, 4

So geht das richtig:

@echo off
set str=min
if "%str%" == "min" (
echo str ist min
) else (
echo str ist nicht min
)
PAUSE

Die IF-Syntax ist schon richtig. Du hast bloß doppelte Anführungszeichen gesetzt:
1. in der SET-Anweisung
2. in der IF-Abfrage

So wie Du das geschrieben hast, würde die IF-Anweisung folgendermaßen aufgelöst:

if " " min "" == "min" ( 
echo str ist min
) else (
echo str ist nicht min
)

Das heißt, es entsteht ein Syntax-Fehler, da das erste "min" als Operator interpretiert wird und somit keine gültige Anweisung ist.

Außerdem solltest Du bei der SET-Anweisung vor und nach dem Gleichheitszeichen keine Leerzeichen/Whitespaces lassen, da diese mit ausgewertet werden.

So kann – je nach Windows-Version – der Variablenname dann auch mal %str_% (Unterstrich=Leerzeichen) lauten, und der Variablenwert aber dann `_"min"` sein.

Wenn Du immer auf die korrekte Verwendung von Leerzeichen und Anführungszeichen achtest, ist Batch gar nicht so schwer. Lass einfach Anführungszeichen in der SET-Anweisung weg, solange im Wert keine Sonderzeichen vorkommen ("^" "&" "!" "<" ">"). Diese Zeichen haben eine besondere Funktion und können zu unerwarteten Fehlern führen, wenn Zeichenketten nicht gleich von Anfang an in Anführungszeichen gesetzt werden.

Keine passende Antwort gefunden?

Fragen Sie die Community