^| 应该是逃亡为| 特点。
set good=Debug^|Win32
echo Incorrect paramets %good%
pause > nul
为什么这给我错误?
^| 应该是逃亡为| 特点。
set good=Debug^|Win32
echo Incorrect paramets %good%
pause > nul
为什么这给我错误?
您有两种方法可以在变量中插入特殊字符。逃离他们:
set good=Debug^|Win32
或将它们括在引号之间:
set "good=Debug|Win32"
但是,正确显示包含特殊字符的变量值的唯一方法是使用延迟扩展:
setlocal EnableDelayedExpansion
set good=Debug^|Win32
echo Incorrect paramets !good!
pause > nul
我尝试对主要问题添加一些解释。
正如 James L. 所指出的,您的变量中有预期的内容,但是回显它是有问题的。
echo Incorrect parameters %good:|=^|%
这是解析器的问题。
如果特殊字符没有被插入符号或引号转义,则在百分比扩展后将解析特殊字符。
James L. 的方法只有在只有管道但变量中没有其他特殊字符的情况下才有效,因为你不能用这种方式替换两个不同的字符。
但是您可以两次转义所有特殊字符,例如:
set good=Debug^^^|Win32^^^&Ampersand
echo Incorrect parameters %good%
或相同
set "good=Debug^|Win32^&Ampersand"
echo Incorrect parameters %good%
这行得通,但好的内容Debug^|Win32^&Ampersand
在大多数情况下是不想要的。
Aacini 的方式,使用延迟扩展对任何内容都是有效的,因为延迟扩展后内容不会被进一步解析,所以特殊字符是无害的。
这是关于百分比膨胀的延迟膨胀的主要优点之一。
还有另一种使用引号的方法,例如 Axel Kemper 的解决方案。
echo "Incorrect parameters %good%"
但在大多数情况下,不应打印引号。
尝试使用标签。
在批处理中,标签前面有冒号。
:ok
是一个标签。
没有必要使用冒号goto
goto ok
goto :ok
是等价的。
|
您正确地将字符转义为set good=Debut^|Win32
. 当你echo
这样做时,你必须|
用转义序列替换字符,如下所示:
@echo off
set good=Debug^|Win32
echo Incorrect paramets %good:|=^|%
pause > nul
这使它成为echo
逃逸的管道 ( ^\
) 而不是管道到Win32
.
set/p
输出:@echo off&setlocal
set "good=Debug|Win32"
<nul set/p"=Incorrect parameters %good%"
echo(
输出是:
Incorrect parameters Debug|Win32
以下按预期工作:
set good=Debug^|Win32
echo "Incorrect parameters %good%"
pause > nul
如果省略 echo 语句中的引号,Windows 会尝试执行“Win32”,这是不可能的。
我会推荐:
echo Incorrect paramets Debug^|Win32
pause > nul