【问题标题】:how concatenate two variables in batch script?如何在批处理脚本中连接两个变量?
【发布时间】:2011-12-12 09:24:24
【问题描述】:

我想在批处理脚本中做这样的事情。请让我知道这是否是正确或可能的方式或任何其他方式?

set var1=A

set var2=B

set AB=hi

set newvar=%var1%%var2%

echo %newvar%  

这应该产生值“hi”。

【问题讨论】:

    标签: batch-file command-prompt


    【解决方案1】:

    您可以在没有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 吗?
    【解决方案2】:

    方法是正确的,但可以通过扩展的 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”,而是回显 AB
    • 你说得对,最后一句我没看,只看到关于concatenating的问题
    【解决方案3】:

    启用延迟变量扩展可以解决您的问题,脚本会产生“hi”:

    setlocal EnableDelayedExpansion
    
    set var1=A
    set var2=B
    
    set AB=hi
    
    set newvar=!%var1%%var2%!
    
    echo %newvar%
    

    【讨论】:

    • 谢谢!!!有效!!对于禁用只是做的是“setlocal DisableDelayedExpansion”?
    • 不行,你需要调用endlocal。但请注意,setlocal-endlocal 块中的所有变量都是本地变量,不能从外部获得。您可以按照stackoverflow.com/questions/3262287/… 中的说明保存所需的变量
    • 您可以在this question查看对此事的更详细描述
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-10
    • 2012-01-26
    • 1970-01-01
    • 1970-01-01
    • 2015-07-24
    相关资源
    最近更新 更多