2012-02-22 66 views
7

我试图创建一个批处理字符串是这样的:> abcd_批次字符串连接

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

set soeid=abcd 

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

echo %str% 
+5

你应该在“不起作用”之后键入的第一件事是解释* how *不起作用。我们无法阅读您的想法或从这里看到您的屏幕;我们所要做的就是你在问题中告诉我们的东西。如果您需要帮助,您需要告诉我们您遇到的问题,以及您尝试的方法无效。 – 2012-02-22 20:19:10

回答

11

我相信它工作得很好。为了证明它,在定义该值后添加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 /?,并从以“最后支持延迟的环境变量扩展......”开头的段落开始阅读。

+0

非常感谢,现在它工作得很好。问题是我用echo%str%而不是!str !.请你能向我解释两者之间的区别。 – NewQueries 2012-02-22 20:25:04

+0

@ NewQueries-我用解释扩展了我的答案 – dbenham 2012-02-22 20:40:59