Dynamic revaluation of variables in a Windows package

I am new to Windows batch script, and probably this is a general question answered several times. I have a problem in the following script:

@echo off

setlocal ENABLEDELAYEDEXPANSION

set var1=1
echo var1 = %var1%
set var2=var1 init value : %var1%, var1 delayed value : !var1!

set var1=2
echo var1 = %var1%
echo var2 = !var2!

endlocal

Current Output:

var1 = 1
var1 = 2
var2 = var1 init value : 1, var1 delayed value : 1

however, the desired result should be:

var1 = 1
var1 = 2
var2 = var1 init value : 1, var1 delayed value : 2

How can this be achieved, any ideas? How does var2 somehow reevaluate after var1 changes its value? Thanks in advance!

+4
source share
2 answers

You mean something like this:

@echo off

setlocal ENABLEDELAYEDEXPANSION

set var1=1
echo var1 = %var1%
set var2=var1 init value : %var1%, var1 delayed value : %%var1%%

set var1=2
echo var1 = %var1%
call echo var2 = %var2%

endlocal

Output Example:

var1 = 1
var1 = 2
var2 = var1 init value : 1, var1 delayed value : 2

When var2 is set, double percent signs are evaluated as single, the
echo of the call causes another assessment, now expanding the actual value of var1

+3
source

-, " "; , , ...

:

  • : set var2=var1 init value : %var1%, var1 delayed value : !var1! %var1%, !var1! . !var1! var2, !var1!, , var2, . ; : "^!var1^!", : ^^^!var1^^^! (escape- ).
  • , var2, %var2%, !var2!.

:

@echo off

setlocal ENABLEDELAYEDEXPANSION

set var1=1
echo var1 = %var1%
set var2=var1 init value : %var1%, var1 delayed value : ^^^!var1^^^!

set var1=2
echo var1 = %var1%
echo var2 = %var2%
+1

Source: https://habr.com/ru/post/1681135/


All Articles