我想创建一个批处理字符串,像这样:>abcd_
我有一个名为soeid的变量,它的值是abcd。所以我正在尝试做这个,但它不起作用。
set soeid=abcd
set "val1=>"
set "val2=_"
set "str=%val1%%soeid%%val2%"
echo %str%
我想创建一个批处理字符串,像这样:>abcd_
我有一个名为soeid的变量,它的值是abcd。所以我正在尝试做这个,但它不起作用。
set soeid=abcd
set "val1=>"
set "val2=_"
set "str=%val1%%soeid%%val2%"
echo %str%
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 /?
并从以“最后,对延迟环境变量扩展的支持...”开头的段落开始阅读。