在回声内回声

时间:2014-05-03 00:53:44

标签: batch-file buildforge

我试图找到由另外两个变量组成的变量的值。我使用它的唯一方法是使用FOR命令和/ F开关并打开第二个命令shell:

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!

有没有人知道更优雅的方法呢?

更新

这里有一个更好的解释我想要完成的事情(并且能够完成使用y'所有 - 尤其是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,因此我需要将此变量设置为与要部署的HOST对应的变量的值。以下是诀窍:

@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

非常感谢大家。希望我的声誉可以让我提出你的答案!

Jozef

2 个答案:

答案 0 :(得分:3)

@echo off

SET A=This
SET B=That
SET ThisThat=YES!

call echo %%%A%%B%%%

编辑更新了更新问题的答案!

@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

for %%a in (DEV UAT TRN PRD) do CALL ECHO %%CURAM_HOST_NAME_%%a%%

但是,你应该注意!变量!替换(与setlocal EnableDelayedExpansion一起)运行CALL echo %%variable%%技巧更快

@ECHO OFF
setlocal EnableDelayedExpansion

SET CURAM_HOST_NAME_DEV=DDW5T
SET CURAM_HOST_NAME_UAT=DUW5T
SET CURAM_HOST_NAME_TRN=DTW5T
SET CURAM_HOST_NAME_PRD=DPW5P

for %%a in (DEV UAT TRN PRD) do ECHO !CURAM_HOST_NAME_%%a!

也许您可能想要查看this post

答案 1 :(得分:2)

@echo off
setlocal enableDelayedExpansion
set "A=this"
set "B=that"
set "thisthat=YES^!"

echo !%A%%B%!

请注意,必须在分配时转义感叹号,因为已启用延迟扩展。