Windows提示内容变量为变量名

Windows prompt content variable as variable name

在windows命令行中可以像指针一样引用内容变量吗?

示例:

SET envTEST=FOO    
SET envPROD=BAR    

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

我想要数据包含 FOO 但它包含 %envTEST%

谢谢

你需要多轮扩张。请参阅 How does the Windows Command Interpreter (CMD.EXE) parse scripts? 了解以下工作原理的解释:

从命令行:

call set "data=%%CURR%%"

或者如果 cmd /v:on 启用了延迟扩展,则:

set "data=!%CURR%!"

从批处理脚本中:

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

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

如果 CURR 在同一代码块内设置和扩展(通常在 IF 或 FOR 循环内完成),则:

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

CALL技术很慢,所以尽量避免。单次使用不是问题,但如果在紧密循环中使用,它可能会成为一个主要问题(性能低下)。