Ich erhalte diesen Fehler:
(war zu dieser Zeit unerwartet.
Der Fehler tritt auf, nachdem der Wert von a akzeptiert wurde. Ich habe versucht und auf Null-Werte überprüft, die ein solches Problem verursachen könnten, aber war nicht erfolgreich.
%Vor% Sie erhalten diesen Fehler, denn wenn die param1
if-Anweisungen ausgewertet werden, ist param immer null, da es sich um bereichsabhängige Variablen ohne verzögerte Erweiterung handelt.
Wenn Klammern verwendet werden, werden alle Befehle und Variablen innerhalb dieser Klammern erweitert. Und zu diesem Zeitpunkt hat param1 keinen Wert, der die if-Anweisungen ungültig macht. Bei der verzögerten Erweiterung werden die Variablen nur erweitert, wenn der Befehl tatsächlich aufgerufen wird.
Ich empfehle auch, den Befehl if not defined
zu verwenden, um festzustellen, ob eine Variable gesetzt ist.
Oh, Liebling. Ein paar kleine Probleme ...
Wie von anderen angegeben, müssen Sie ein Zitat erstellen, um sich vor leeren / Leerzeichen enthaltenden Einträgen zu schützen, und verwenden Sie die! delayed_expansion! Einrichtung.
Zwei weitere Dinge, von denen Sie wissen sollten:
Zunächst wird set/p
einer Variablen einen Benutzereingabewert zuweisen. Das ist keine Neuigkeit - aber das Problem ist, dass das Drücken von enter
in der Antwort die Variable UNCHANGED belässt - es wird keine Null-Länge-Zeichenkette der Variablen zugewiesen (daher die Variable aus der Umgebung löschend). Die sichere Methode ist:
Das heißt natürlich, wenn Sie enter
nicht wollen, um den bestehenden Wert zu wiederholen.
Eine andere nützliche Form ist
oder
%Vor% (was mit dem Standardwert auffordert; !var!
wenn in einer Blockanweisung mit delayedexpansion)
Das zweite Problem ist, dass bei einigen Windows-Versionen (obwohl W7 dieses Problem zu "reparieren" scheint) jedes Etikett - einschließlich eines :: comment
(welches ein kaputtes Etikett ist) - jeden Block - also eine geklammerte Verbindung - beendet Aussage)
Tags und Links cmd if-statement batch-file