首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >回声内部的回声

回声内部的回声
EN

Stack Overflow用户
提问于 2014-05-03 00:53:44
回答 2查看 178关注 0票数 1

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

代码语言:javascript
复制
SET A=This
SET B=That
SET ThisThat=YES!

FOR /F %I IN ('ECHO %A%%B%') DO cmd.exe /C ECHO %%I%

输出:

代码语言:javascript
复制
C:\>cmd.exe /c echo %ThisThat%
YES!

有谁知道一个更优雅的方法吗?

更新

这里有一个更好的解释,说明我想要完成什么(并且能够用你们的--尤其是Aacini的回应来完成)

对于Rational BuildForge项目,我为每个部署目标主机定义了环境变量。示例:

代码语言:javascript
复制
CURAM_HOST_NAME_DEV=DDW5T
CURAM_HOST_NAME_UAT=DUW5T
CURAM_HOST_NAME_TRN=DTW5T
CURAM_HOST_NAME_PRD=DPW5P

另一个变量主机包含要部署到的环境。部署代码对于所有部署目标都是通用的,并且使用变量CURAM_HOST_NAME,因此我需要将这个变量设置为对应于部署到的主机的变量的值。以下是其中的诀窍:

代码语言:javascript
复制
@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%%%

输出:

代码语言:javascript
复制
DDW5T
DUW5T
DTW5T
DPW5P

在BuildForge步骤中,设置此特定变量的代码如下所示:

代码语言:javascript
复制
.bset env "CURAM_HOST_NAME=`CALL ECHO %%%CURAM_HOST_NAME_%%HOST%%%%`"

( BF解析器需要额外的%s)

对于主机变量的DEV值,这将在日志中产生以下结果:

代码语言:javascript
复制
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

非常感谢大家。希望我有这样的名声,能让我对你的答案投出更高的分数!

乔泽夫

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-05-03 01:45:54

代码语言:javascript
复制
@echo off

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

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

编辑:更新回答更新的问题!

代码语言:javascript
复制
@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%%技巧快得多:

代码语言:javascript
复制
@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

票数 3
EN

Stack Overflow用户

发布于 2014-05-03 01:39:28

代码语言:javascript
复制
@echo off
setlocal enableDelayedExpansion
set "A=this"
set "B=that"
set "thisthat=YES^!"

echo !%A%%B%!

请注意,感叹号必须在赋值时转义,因为启用了延迟扩展。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23439013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档