2
@echo off
pushd

setlocal enabledelayedexpansion enableextensions

set VARY=before
if "!VARY!" == "before" (
set VARY=2    
if "!VARY!" == "2" @echo If you see this, yes echo !VARY!
)


set VAR=before
if "!VAR!" == "before" (
set VAR=1
if "!VAR!" == "1" @echo If you see this, it worked
)

popd

Expected Output:
If you see this, yes 2
If you see this, it worked

Actual Output:
If you see this, it worked

Can someone explain why is the output not showing "If you see this, yes 2" as well?

2 Answers2

2

You have trailing spaces after the 2, so compare if "2 " == "2" (not equal).

To avoid this use the following code:

set "VARY=before"
if "!VARY!" == "before" (
set  "VARY=2"
if "!VARY!"=="2" echo If you see this, yes echo !VARY!
)

.. and if you set numbers, you can also use "set /a":

set "VARY=before"
if "!VARY!" == "before" (
set /a VARY=2
if "!VARY!"=="2" echo If you see this, yes echo !VARY!
)
Endoro
  • 37,015
  • 8
  • 50
  • 63
1

It's simple. The first time you set VARY to 2<space><space><space><space> instead of 2.

To avoid this use ALWAYS the syntax set "VARY=2"

This syntax only takes the input from the first to the last quote, all characters after the last quote are dropped.

jeb
  • 78,592
  • 17
  • 171
  • 225