0

It is possible in windows command line refer to a content variable like a pointer?

Example:

SET envTEST=FOO    
SET envPROD=BAR    

SET CURR=envTEST
SET data=%%CURR%% 

I want to data contains FOO but it contains %envTEST%

Thanks

dbenham
  • 127,446
  • 28
  • 251
  • 390
Marino
  • 56
  • 6

1 Answers1

2

You need multiple rounds of expansion. See How does the Windows Command Interpreter (CMD.EXE) parse scripts? for an explanation as to why the following work:

From the command line:

call set "data=%%CURR%%"

Or if delayed expansion has been enabled by cmd /v:on, then:

set "data=!%CURR%!"

From within a batch script:

call set "data=%%%CURR%%%

or

setlocal enableDelayedExpansion
...
set "data=!%CUR%!

If CURR is set and expanded within the same code block (typically done within IF or FOR loop), then:

setlocal enableDelayedExpansion
...
(
  set "CURR=envTEST"
  for %%V in (!CURR!) do set "data=!%%V!"
)

The CALL technique is quite slow, so I try to avoid it. It is not an issue for a single use, but it can become a major problem (slow performance) if used within a tight loop.

Community
  • 1
  • 1
dbenham
  • 127,446
  • 28
  • 251
  • 390