批量延迟扩展不起作用

时间:2009-11-19 12:07:31

标签: windows batch-file delayedvariableexpansion

好的,我疯了,我不知道还能做什么,我已经尝试了几件事,但没有任何工作。

查看此示例代码(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:\>

4 个答案:

答案 0 :(得分:14)

您必须使用!var!进行延迟扩展。 %var%始终在解析阶段展开。

即,将代码更改为

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

答案 1 :(得分:1)

不要使用==,批量使用EQU

例如写:

if %bla% EQU %blub% echo same

答案 2 :(得分:1)

在cmd提示符开头,您必须键入“ CMD / V”或“ CMD / V:ON”

此测试代码成功后

SETLOCAL EnableDelayedExpansion
Set "_var=first"
Set "_var=second" & Echo %_var% !_var!

您应该能够看到“第一秒”的输出 sample cmd prompt screen

答案 3 :(得分:0)

我找到了你的问题。

set VAR=after;

从上面的代码中删除;