批量替换特殊字符不起作用

时间:2013-04-11 08:31:40

标签: batch-file cmd

我正在尝试将双引号简单批量替换为单引号。 teststring必须包含特殊字符,最多:"<LF>" 我无法替换那里的双引号,因为批次只与Syntaxerror一起存在。你知道为什么,或者如何克服这个问题吗?

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

3 个答案:

答案 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

中的输入/输出管道