批处理字符串连接

时间:2012-02-22 20:02:00

标签: windows batch-file cmd

我正在尝试创建这样的批处理字符串:> abcd _

我有一个名为soeid的变量,其值为abcd。所以这就是我正在做的事情,但它不起作用。

set soeid=abcd

set "val1=>"
set "val2=_"
set "str=%val1%%soeid%%val2%"

echo %str%

1 个答案:

答案 0 :(得分:13)

我确信它工作得很好。为了证明这一点,在定义值后添加SET STR,您将看到正确的值。

您遇到的问题是当您尝试回显该值时,正在执行的行变为:echo >abcd_>未被引用或转义,因此它只是将ECHO的输出没有参数,并将其重定向到名为“abcd _”的文件

如果您不介意看到引号,请将您的行更改为echo "%str%",然后就可以了。

另一个选项是启用和使用延迟扩展(我假设这是一个批处理脚本代码,而不是在命令行上执行)

setlocal enableDelayedExpansion
set soeid=abcd

set "val1=>"
set "val2=_"
set "str=%val1%%soeid%%val2%"

echo !str!

正常%var%扩展发生在解释器解析该行的早期。延迟!var!扩展发生在执行之前的末尾。在中间的某处检测到重定向。这就是正常扩展不起作用的原因 - 解释器看到扩展的>字符并将其解释为输出重定向操作符。延迟扩展会从解释器中隐藏>字符,直到解析重定向为止。

有关延迟扩展的更多信息,请从命令行键入SET /?,然后从以“最后,支持延迟环境变量扩展...”开头的段开头阅读。

相关问题