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

Kan*_*esh 14 batch-file command-prompt

我想在批处理脚本中做这样的事情.如果这是正确或可能的方式或任何其他方式,请告诉我?

set var1=A

set var2=B

set AB=hi

set newvar=%var1%%var2%

echo %newvar%  
Run Code Online (Sandbox Code Playgroud)

这应该产生值"hi".

Ser*_*bry 22

启用延迟变量扩展解决了您的问题,脚本生成"hi":

setlocal EnableDelayedExpansion

set var1=A
set var2=B

set AB=hi

set newvar=!%var1%%var2%!

echo %newvar%
Run Code Online (Sandbox Code Playgroud)

  • 谢谢!!!有效!!禁用只是做“setlocal DisableDelayedExpansion”? (2认同)

小智 7

你可以在没有的情况下完成它setlocal,因为setlocal命令变量将无法生存,endlocal因为它是在中创建的setlocal.通过这种方式,变量将以正确的方式定义.

为此,请使用以下代码:

set var1=A

set var2=B

set AB=hi

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

echo %newvar% 
Run Code Online (Sandbox Code Playgroud)

注意:您必须call在设置变量之前使用它,否则它将无效.

  • 你能解释一下为什么我们需要在第四行的 `set` 之前调用 `call` 而不是在前三行吗? (3认同)

jeb*_*jeb 5

方法是正确的,但可以使用扩展的 set-syntax 进行一些改进。

set "var=xyz"
Run Code Online (Sandbox Code Playgroud)

将 var 设置为直到最后一个引号为止的内容,这确保不会附加“隐藏”空格。

你的代码看起来像

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
Run Code Online (Sandbox Code Playgroud)