如何在批处理脚本中连接两个变量?

20

我想在批处理脚本中实现这样的功能。请告诉我这是否是正确或可能的方法,或者是否有其他方法?

set var1=A

set var2=B

set AB=hi

set newvar=%var1%%var2%

echo %newvar%  

这应该产生值“hi”。

3个回答

27

启用延迟变量扩展可以解决您的问题,脚本将输出"hi":

setlocal EnableDelayedExpansion

set var1=A
set var2=B

set AB=hi

set newvar=!%var1%%var2%!

echo %newvar%

2
谢谢!!!它起作用了!!要禁用的话只需要执行“setlocal DisableDelayedExpansion”即可。 - Kantesh
1
不,你需要调用endlocal。但要注意,在setlocal-endlocal块中的所有变量都是本地的,无法从外部访问。你可以按照https://dev59.com/W3A75IYBdhLWcg3wf5NV中所述保存所需的变量。 - Sergey Podobry
您可以在这个问题中查看更详细的描述。 - Aacini

11

您可以不使用 setlocal 命令,因为变量在 setlocal 中创建,所以在 endlocal 后变量将无法保留。通过以下代码,您可以正确定义变量:

请使用以下代码:

set var1=A

set var2=B

set AB=hi

call set newvar=%%%var1%%var2%%%

echo %newvar% 

注意:在设置变量之前,您必须使用call,否则它将无法正常工作。

1
这比普通的 setlocal enabledelayedexpansion 更有趣。它还可以使用全局变量。 - ender_scythe
5
为什么在第四行中需要先调用call再调用set,而前三行却不需要? - R. Bourgeon

5
这种方法是正确的,但可以通过扩展集合语法来改进一下。
set "var=xyz"

将变量设置为最后一个引号之前的内容,这可以确保不会附加任何“隐藏”的空格。

您的代码应该是这样的

set "var1=A"
set "var2=B"
set "AB=hi"
set "newvar=%var1%%var2%"
echo %newvar% is the concat of var1 and var2
echo !%newvar%! is the indirect content of newvar

它没有回显值“hi”,而是回显AB。 - Kantesh
你说得对,我没有读到最后一句话,我只看到了有关连接的问题。 - jeb

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接