批量字符串拼接

10

我想创建一个批处理字符串,像这样:>abcd_

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

set soeid=abcd

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

echo %str%

5
“不起作用”后面应该先说明它是以何种方式不工作的。我们无法读取您的思维或从这里看到您的屏幕;我们所知道的仅限于您在问题中告诉我们的内容。如果您需要帮助,您需要告诉我们您遇到的问题,以及您尝试了什么但未奏效的方法。 - Ken White
1个回答

15
我相信它完全可以正常工作。为了证明这一点,在定义值后添加 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 /?并从以“最后,对延迟环境变量扩展的支持...”开头的段落开始阅读。


非常感谢,现在它正常工作了。问题是我使用了echo %str%而不是!str!。请问您能否解释一下两者之间的区别。 - NewQueries
@NewQueries- 我在我的回答中加入了解释。 - dbenham

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