我正在尝试将双引号简单地批量替换为单引号。测试字符串最多必须包含特殊字符:"<LF>"
我不能在那里替换双引号,因为批处理只存在于Syntaxerror
. 你知道为什么,或者如何克服这个吗?
SET TEST="<LF>","<HT>"
SET modified=%TEST:"='% <-- Syntaxerror
ECHO %modified%
我正在尝试将双引号简单地批量替换为单引号。测试字符串最多必须包含特殊字符:"<LF>"
我不能在那里替换双引号,因为批处理只存在于Syntaxerror
. 你知道为什么,或者如何克服这个吗?
SET TEST="<LF>","<HT>"
SET modified=%TEST:"='% <-- Syntaxerror
ECHO %modified%
使用延迟扩展:
setlocal enabledelayedexpansion
SET TEST="<LF>","<HT>"
SET modified=!TEST:"='! <-- Syntaxerror
ECHO !modified!
正如Fuzzy Button 先生所说,问题在于 shell 将其解释<
为>
重定向。延迟扩展(使用!
而不是)在解析后%
扩展变量,因此不会影响重定向。
SET
您可以通过将参数括在引号中来解决没有延迟的扩展:
SET "modified=!TEST:"='!"
但是ECHO
,那仍然是有问题的。
虽然延迟扩张是一件好事,但没有必要回答这个问题。有时 setlocal 不可用。我碰到了一个。
在 windows shell 中,引号的字符串匹配适用于最外层的匹配对(在大多数情况下,但不是全部),而不是最内层。
SET TEST="<LF>","<HT>"
echo %TEST%
SET "modified=%TEST:"='%"
echo.|set /p "___=%modified%"
解决方法:如果 echo 无法打印某些内容,则设置可以。去搞清楚。
这对我有用...
SET TEST="LF","HT"
echo %TEST%
SET modified=%TEST:"='%
ECHO %modified%
问题在于您<
的 s 和>
s 被解释为Echo