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