3

我正在尝试将双引号简单地批量替换为单引号。测试字符串最多必须包含特殊字符:"<LF>" 我不能在那里替换双引号,因为批处理只存在于Syntaxerror. 你知道为什么,或者如何克服这个吗?

SET TEST="<LF>","<HT>"
SET modified=%TEST:"='%  <-- Syntaxerror
ECHO %modified%
4

3 回答 3

2

使用延迟扩展:

setlocal enabledelayedexpansion
SET TEST="<LF>","<HT>"
SET modified=!TEST:"='!  <-- Syntaxerror
ECHO !modified!

正如Fuzzy Button 先生所说,问题在于 shell 将其解释<>重定向。延迟扩展(使用!而不是)在解析%扩展变量,因此不会影响重定向。

SET您可以通过将参数括在引号中来解决没有延迟的扩展:

SET "modified=!TEST:"='!"

但是ECHO,那仍然是有问题的。

于 2013-04-11T09:07:03.353 回答
1

虽然延迟扩张是一件好事,但没有必要回答这个问题。有时 setlocal 不可用。我碰到了一个。

在 windows shell 中,引号的字符串匹配适用于最外层的匹配对(在大多数情况下,但不是全部),而不是最内层。

SET TEST="<LF>","<HT>"
echo %TEST%
SET "modified=%TEST:"='%"
echo.|set /p "___=%modified%"

解决方法:如果 echo 无法打印某些内容,则设置可以。去搞清楚。

于 2015-10-08T17:37:47.950 回答
0

这对我有用...

SET TEST="LF","HT"
echo %TEST%
SET modified=%TEST:"='%
ECHO %modified%

问题在于您<的 s 和>s 被解释为Echo

于 2013-04-11T09:03:08.457 回答