从运行时生成的变量名称展开环境变量

时间:2017-05-13 18:06:33

标签: windows batch-file environment-variables delayedvariableexpansion

我创建了一个批处理文件,根据我传递给它的编译器名称来改变PATH。我还想在运行时从众多变量中选择,我有另一个批处理文件,我在其中生成要查看的相应环境变量的名称,但我看不到如何扩展生成的变量

e.g

EXE_PATH_%_1%_%PLATFORM%

所以当调用批处理文件时,环境变量_1和PLATFORM会扩展,以生成我想要扩展的变量名称的命名约定的部分

如果我调用echo EXE_PATH_%_1%_%PLATFORM%,这将产生我想要展开的变量的名称

如何从生成的名称转到具有该名称的环境变量的内容?

我怀疑delayedexpension是必需的,但我不确定

1 个答案:

答案 0 :(得分:0)

您的意思并不是很清楚,但这很可能是您需要的信息:

@echo off
setlocal
set "_1=VSC"
set "PLATFORM=x64"
set "EXE_PATH_%_1%_%PLATFORM%=%ProgramFiles%\VSC\bin"
set "EXE_PATH_NAME=EXE_PATH_%%_1%%_%%PLATFORM%%"
set "EXE_PATH_NAME=%EXE_PATH_NAME%"
set EXE_PATH_
endlocal

此批处理代码输出例如:

EXE_PATH_NAME=EXE_PATH_%_1%_%PLATFORM%
EXE_PATH_VSC_x64=C:\Program Files\VSC\bin

有必要使用 CALL 来扩展EXE_PATH_NAME值的变量,即根据JosefZ的注释使用此批次代码再添加一行代码来设置变量EXE_PATH_VALUE

@echo off
setlocal
set "_1=VSC"
set "PLATFORM=x64"
set "EXE_PATH_%_1%_%PLATFORM%=%ProgramFiles%\VSC\bin"
set "EXE_PATH_NAME=EXE_PATH_%%_1%%_%%PLATFORM%%"
call set "EXE_PATH_NAME=%EXE_PATH_NAME%"
call set "EXE_PATH_VALUE=%%EXE_PATH_%_1%_%PLATFORM%%%"
set EXE_PATH_
endlocal

此批次代码包含其他call输出,例如:

EXE_PATH_NAME=EXE_PATH_VSC_x64
EXE_PATH_VALUE=C:\Program Files\VSC\bin
EXE_PATH_VSC_x64=C:\Program Files\VSC\bin

但我真的不明白为什么要这么复杂。