批量延时扩展不起作用
好吧,我越来越疯狂,我不知道还有什么要做,我已经尝试了几件事,没有任何工作。批量延时扩展不起作用
看看这个示例代码(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:\>
你必须使用!var!
的延迟扩展。分析阶段总是扩展%var%
。
即,更改您的代码
setlocal enabledelayedexpansion enableextensions
set VAR=before
if "%VAR%" == "before" (
set VAR=after
if "!VAR!" == "after" @echo If you see this, it worked
)
不,在这种情况下,输出是“if”!VAR!“==”在“”之后。 – Richard 2009-11-19 12:31:25
不要担心你看到的命令回应屏幕;延期扩张的关键是在此之后完成。将@ECHO置于脚本的顶部,您将看到它正在工作。 – 2009-11-19 12:44:57
HoursWasted ++;谢谢!那是我的两倍。 – 2012-07-26 15:59:00
不使用==,在批处理必须使用EQU
对于写入例:
if %bla% EQU %blub% echo same
,我发现你的问题。
set VAR=after;
从上方
代码删除
;
失去分号在线路 组VAR =之后; 它应该工作 – 2009-11-19 13:03:49就是这样!一个分号......我,我是一个新手:) – Richard 2009-11-19 13:39:17