views:

197

answers:

1

Ok, I'm getting crazy and I don't know what else to do, I've tried several things and nothing is working.

Look at this sample code (test.cmd):

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

This is the generated output:

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

Am I doing something wrong?

This is just a test, the code I need uses variables too and needs delayed expansion, but it this simple test doesn't work the other wont work either (I've tried, I ended up with a simple example to test if it worked).

EDIT: New code and output:

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

Output:

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

D:\>
+4  A: 

You have to use !var! for delayed expansion. %var% is always expanded on parse stage.

I.e., change your code to

setlocal enabledelayedexpansion enableextensions
set VAR=before
if "%VAR%" == "before" (
    set VAR=after
    if "!VAR!" == "after" @echo If you see this, it worked
)
atzz
Nope, in that case the output is "if "!VAR!" == "after"".
Richard
Don't worry about the commands you're seeing echoed the screen; the point of delayed expansion is that it's done after that. Put an @ECHO OFF at the top of your script and you'll see that it's working.
Dave Webb
Hmm... I don't think so, if it worked shouldn't I see "If you see this, it worked"?
Richard