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

时间:2014-03-15 11:10:48

标签: windows file batch-file

我想将以下内容放入文件中:<ScriptFile Make="3">
由于包含尖括号<>以及双引号字符"的字符串,它失败了。

我试过以下方式逃避角色:^<ScriptFile Make=""3""^>
它工作正常,但文件中的输出与转义字符串完全相同。

代码段:

@echo off

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

如何在不丢失双引号和尖括号的情况下将TEMP变量的字符串值输出到文件gen.xml中?

3 个答案:

答案 0 :(得分:3)

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

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

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

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

答案 1 :(得分:1)

这对我有用:

@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

答案 2 :(得分:0)

不应将

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

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

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

首先为接下来的两个命令行创建一个本地环境,其中启用了命令扩展和启用的环境变量的延迟扩展,这些都是必需的。默认情况下启用命令扩展,但默认情况下禁用延迟扩展。请参阅this answer详细解释 SETLOCAL ENDLOCAL 命令的内容。

字符串<ScriptFile Make="3">在环境变量TempVar旁边分配。无需转义尖括号或双引号。有关详细解释为什么不需要转义此字符串中的任何内容以及为什么第一个双引号字符留有变量名称而不是等号后读this answer

环境变量的值由命令 ECHO 输出,并使用延迟扩展将此输出与重定向运算符>重定向到文件gen.xml

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

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

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

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

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

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

另请阅读Microsoft TechNet文章Using command redirection operators