Batch-verzögerte Erweiterung nicht funktioniert
Ok, ich bin verrückt und ich weiß nicht, was anderes zu tun, ich habe versucht, verschiedene Dinge und nichts funktioniert.
Blick auf diese Beispielcode (test.cmd):
setlocal enabledelayedexpansion enableextensions
set VAR=before
if "%VAR%" == "before" (
set VAR=after;
if "%VAR%" == "after" @echo If you see this, it worked
)
Dies ist die generierte Ausgabe:
D:\>ver
Microsoft Windows [Version 6.1.7600]
D:\>test.cmd
D:\>setlocal enabledelayedexpansion enableextensions
D:\>set VAR=before
D:\>if "before" == "before" (
set VAR=after;
if "before" == "after"
)
D:\>
Mache ich etwas falsch?
Dies ist nur ein test, den code brauche ich verwendet, Variablen zu und braucht verzögerte Erweiterung, aber es ist dieser einfache test nicht funktioniert, die andere nicht funktionieren (die ich ausprobiert habe, landete ich mit einem einfachen Beispiel um zu testen, ob es funktioniert).
EDIT: Neuen code ein und Ausgabe:
test.cmd:
@echo off
setlocal enabledelayedexpansion enableextensions
set VAR=before
if "%VAR%" == "before" (
set VAR=after;
if "!VAR!" == "after" (
echo It worked.
) else (
echo It didn't work.
)
)
Ausgabe:
D:\>test.cmd
It didn't work.
D:\>
- Verlieren Sie das Semikolon in der Zeile set VAR=nach; und es sollte funktionieren
- Das ist es! Ein Semikolon... meine Güte, was für ein Anfänger ich bin 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie
!var!
für die verzögerte expansion.%var%
ist immer aufgeklappt, analysieren Bühne.I. e., ändern Sie Ihren code so,
nicht mit == , in batch müssen Sie EQU
Zum Beispiel schreiben:
==
undEQU
ist der Vergleich von zahlen.IF 16 EQU 0x10
ist wahr, aberIF 16 == 0x10
falsch ist, wie es vergleicht immer stringsAm Anfang der cmd-Eingabeaufforderung, geben Sie "CMD /V" ODER "CMD /V:ON"
Nach dieser Prüf-code sollte funktionieren
Sollten Sie in der Lage, um zu sehen, Ausgang "ersten Sekunde"
cmd /v
ist überflüssig, dasetlocal EnableDelayedExpansion
aktivieren, abersetlocal
funktioniert nur in batch-Dateien.cmd /v
ist nur notwendig, wenn Sie verwenden möchten, verzögerte Erweiterung direkt auf der KommandozeileIch das problem gefunden.
löschen
;
aus dem obigen code