批量延时扩展不起作用

问题描述:

好吧,我越来越疯狂,我不知道还有什么要做,我已经尝试了几件事,没有任何工作。批量延时扩展不起作用

看看这个示例代码(TEST.CMD):

setlocal enabledelayedexpansion enableextensions 
set VAR=before 
if "%VAR%" == "before" (
    set VAR=after; 
    if "%VAR%" == "after" @echo If you see this, it worked 
) 

这是生成的输出:

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:\> 

难道我做错了什么?

这只是一个测试,我需要的代码也使用变量,并且需要延迟扩展,但是这个简单的测试不起作用,其他工作也不会起作用(我试过了,我以一个简单的例子来结束测试它是否工作)。

编辑:新的代码和输出:

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. 
    ) 
) 

输出:

D:\>test.cmd 
It didn't work. 

D:\> 
+3

代码删除;失去分号在线路 组VAR =之后; 它应该工作 – 2009-11-19 13:03:49

+0

就是这样!一个分号......我,我是一个新手:) – Richard 2009-11-19 13:39:17

你必须使用!var!的延迟扩展。分析阶段总是扩展%var%

即,更改您的代码

setlocal enabledelayedexpansion enableextensions 
set VAR=before 
if "%VAR%" == "before" (
    set VAR=after 
    if "!VAR!" == "after" @echo If you see this, it worked 
) 
+0

不,在这种情况下,输出是“if”!VAR!“==”在“”之后。 – Richard 2009-11-19 12:31:25

+2

不要担心你看到的命令回应屏幕;延期扩张的关键是在此之后完成。将@ECHO置于脚本的顶部,您将看到它正在工作。 – 2009-11-19 12:44:57

+0

HoursWasted ++;谢谢!那是我的两倍。 – 2012-07-26 15:59:00

不使用==,在批处理必须使用EQU

对于写入例:

if %bla% EQU %blub% echo same 

,我发现你的问题。

set VAR=after; 

从上方