【发布时间】:2011-12-12 09:24:24
【问题描述】:
我想在批处理脚本中做这样的事情。请让我知道这是否是正确或可能的方式或任何其他方式?
set var1=A
set var2=B
set AB=hi
set newvar=%var1%%var2%
echo %newvar%
这应该产生值“hi”。
【问题讨论】:
我想在批处理脚本中做这样的事情。请让我知道这是否是正确或可能的方式或任何其他方式?
set var1=A
set var2=B
set AB=hi
set newvar=%var1%%var2%
echo %newvar%
这应该产生值“hi”。
【问题讨论】:
您可以在没有setlocal 的情况下执行此操作,因为setlocal 命令该变量将无法在endlocal 中存在,因为它是在setlocal 中创建的。这样,变量将被正确定义。
为此,请使用以下代码:
set var1=A
set var2=B
set AB=hi
call set newvar=%%%var1%%var2%%%
echo %newvar%
注意:您必须在设置变量之前使用call,否则它将不起作用。
【讨论】:
setlocal enabledelayedexpansion有趣多了。它也适用于全局变量。
call 而不是在前三行调用set 吗?
方法是正确的,但可以通过扩展的 set-syntax 进行一些改进。
set "var=xyz"
将 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
【讨论】:
启用延迟变量扩展可以解决您的问题,脚本会产生“hi”:
setlocal EnableDelayedExpansion
set var1=A
set var2=B
set AB=hi
set newvar=!%var1%%var2%!
echo %newvar%
【讨论】: