Wenn ich versuche verzögerte Erweiterung einer Umgebungsvariablen mit einer Klausel innerhalb einer .BAT-Datei IF-Anweisung die Zeile fehlschlägt zu analysieren/ausführen. Verwenden von% -Zeichen anstelle von! für die Erweiterung funktioniert. Die identische verzögerte Erweiterung funktioniert auch an anderen Stellen, zB eine ECHO-Anweisung. Zum Beispiel:Bat-Datei enabledelayedexpansion wird in IF-Anweisung nicht erweitert
@echo off& setlocal enabledelayedexpansion
set t=abcd
echo !t:~0,2!
if %t:~0,2% == ab echo equal
if !t:~0,2! == ab echo equal
Das Echo t: ~ 0,2! produziert richtig: ab
Die wenn% t: ~ 0,2% == ab Echo gleich erzeugt richtig: gleich
Die wenn t: ~ 0,2! == ab echo gleich gibt den Fehler aus: 2! war zu dieser Zeit unerwartet
Ich verstehe nicht, warum ich eine verzögerte Erweiterung mit einer Klausel innerhalb einer IF-Anweisung nicht verwenden kann. Ohne die colon-Klausel funktioniert die verzögerte Erweiterung innerhalb der IF-Anweisung einwandfrei.
es lesen Schätzen - das ist mein Problem gelöst, da ich mit Streichern in diesem Fall arbeitete. Es kann immer noch Probleme mit numerischen IF-Vergleichen geben, zB n = 123 setzen und wenn! N: ~ 1,2! gtr 5 - kann die Argumente nicht in Anführungszeichen einschließen, da dies einen Zeichenfolgenvergleich erzwingt. Wenn Sie zuvor ein Set verwenden und die verzögerte Erweiterung von der if-Anweisung entfernen, wird das behoben. –
@PaulH Sie können das Komma auch mit einem Caret verlassen – jeb