我正在尝试获取由其他两个变量组成的变量的值。我让它工作的唯一方法是使用 FOR 命令和 /F 开关并打开第二个命令外壳:
SET A=This
SET B=That
SET ThisThat=YES!
FOR /F %I IN ('ECHO %A%%B%') DO cmd.exe /C ECHO %%I%
输出:
C:\>cmd.exe /c echo %ThisThat%
YES!
有谁知道更优雅的方式来做到这一点?
更新
这是对我试图完成的事情的更好解释(并且能够使用你们的 - 尤其是 Aacini 的 - 回复来完成)
对于 Rational BuildForge 项目,我为每个部署目标主机定义了环境变量。例子:
CURAM_HOST_NAME_DEV=DDW5T
CURAM_HOST_NAME_UAT=DUW5T
CURAM_HOST_NAME_TRN=DTW5T
CURAM_HOST_NAME_PRD=DPW5P
另一个变量 HOST 包含要部署到的环境。部署代码对于所有部署目标都是通用的,并且使用变量 CURAM_HOST_NAME,因此我需要将此变量设置为与要部署到的主机对应的变量的值。以下是诀窍:
@ECHO OFF
SET CURAM_HOST_NAME_DEV=DDW5T
SET CURAM_HOST_NAME_UAT=DUW5T
SET CURAM_HOST_NAME_TRN=DTW5T
SET CURAM_HOST_NAME_PRD=DPW5P
SET HOST=DEV
CALL ECHO %%CURAM_HOST_NAME_%HOST%%%
SET HOST=UAT
CALL ECHO %%CURAM_HOST_NAME_%HOST%%%
SET HOST=TRN
CALL ECHO %%CURAM_HOST_NAME_%HOST%%%
SET HOST=PRD
CALL ECHO %%CURAM_HOST_NAME_%HOST%%%
输出:
DDW5T
DUW5T
DTW5T
DPW5P
在 BuildForge 步骤中,设置此特定变量的代码如下所示:
.bset env "CURAM_HOST_NAME=`CALL ECHO %%%CURAM_HOST_NAME_%%HOST%%%%`"
(BF 解析器需要额外的 %)
对于 HOST 变量的 DEV 值,这将在日志中生成以下内容:
1026 5/3/14 7:34 PM STEP .bset env "CURAM_HOST_NAME=`CALL ECHO %%%CURAM_HOST_NAME_%%HOST%%%%`"
1027 5/3/14 7:34 PM EXEC .bset env 'CURAM_HOST_NAME' = 'DDW5BTH
非常感谢大家。希望我的声誉可以让我支持您的答案!
约瑟夫