Batch-Datei: (war zu diesem Zeitpunkt unerwartet

9

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%     
user2540289 01.07.2013, 20:00
quelle

3 Antworten

20

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.

%Vor%     
David Ruhmann 01.07.2013, 21:33
quelle
8

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:

%Vor%

Das heißt natürlich, wenn Sie enter nicht wollen, um den bestehenden Wert zu wiederholen.
Eine andere nützliche Form ist

%Vor%

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)

    
Magoo 02.07.2013 01:05
quelle
4

Sie benötigen doppelte Anführungszeichen in all Ihren drei if -Anweisungen, zB:

%Vor% %Vor%     
Endoro 01.07.2013 20:19
quelle

Tags und Links