Batch delayed expansion not working

batch-file, delayedvariableexpansion, windows

Solution

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
)

Problem

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

Original source