如何将尖括号等特殊字符输出到HTML/XHTML/XML文件中



我想把以下内容放入文件:<ScriptFile Make="3">
失败的原因是字符串中包含尖括号<>以及双引号"

我已经尝试转义以下方式的字符:^<ScriptFile Make=""3""^>
它可以工作,但是文件中的输出与转义后的字符串完全相同。

代码片段:

@echo off
set TEMP="^<ScriptFile Make=""3""^>"
echo %TEMP% > gen.xml
pause

我如何输出TEMP变量的字符串值到文件gen.xml而不丢失双引号和尖括号?

您可以从变量中提取尖括号,如下所示:

@echo off
set TEMP1=ScriptFile Make="3"
echo ^<%TEMP1%^> > gen.xml
pause

这样,括号可以正确转义,您不需要对变量中的字符串进行任何特殊转义,并且gen.xml看起来像预期的那样:

D:temp>type gen.xml
<ScriptFile Make="3">

这对我有用:

@echo off
set "TEMP=^<ScriptFile Make="3"^>"
echo %TEMP% > gen.xml
pause
另一种方法是使用延迟展开:
@echo off
set "TEMP=<ScriptFile Make="3">"
setlocal EnableDelayedExpansion
echo !TEMP! > gen.xml
endlocal
pause

TEMP不应该用作环境变量名,因为TEMP是Windows预定义的重要环境变量。它的值为当前用户帐户的临时文件的完整路径的目录名。有关详细信息,请参阅维基百科文章Windows环境变量。

一种方法是使用Andriy M.建议的延迟展开。

@echo off
setlocal EnableExtensions EnableDelayedExpansion
set "TempVar=<ScriptFile Make="3">"
echo !TempVar!>gen.xml
endlocal

首先为接下来的两个命令行创建一个本地环境,其中启用了命令扩展名和环境变量的延迟扩展,这两个都是这里需要的。命令扩展默认开启,延迟扩展默认关闭。请参阅这个答案,详细解释SETLOCALENDLOCAL命令的作用。

在环境变量TempVar后面赋值字符串<ScriptFile Make="3">。不需要转义尖括号或双引号。要详细解释为什么不需要转义这个字符串中的任何内容,为什么第一个双引号字符在变量名的左边,而不是在等号后面,请阅读这个答案。

环境变量的值由命令ECHO输出,并使用重定向操作符>使用延迟扩展将该输出重定向到文件gen.xml中。

第二个感叹号!和重定向操作符>之间没有空格。这样可以避免在<ScriptFile Make="3">后面写入尾随空格到文件中。在解析该命令行时,忽略>和文件名gen.xml之间的1个或多个空格字符。但是重定向操作符>左边的任何空白字符也由命令ECHO输出,因此也写入文件中。

另一种方法是根本不使用环境变量,并使用插入符号^转义尖括号,如下所示:

@echo off
echo ^<ScriptFile Make="3"^>>gen.xml
endlocal

在使用ECHO命令时,双引号不能转义,因为在这种特殊情况下,双引号字符被解释为文字字符。

为了理解所使用的命令及其工作原理,请打开命令提示符窗口,在其中执行以下命令,并非常仔细地阅读每个命令显示的所有帮助页面。

  • echo /?
  • endlocal /?
  • set /?
  • setlocal /?

并阅读Microsoft TechNet文章使用命令重定向操作符

最新更新