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