TEMP
不应作为环境变量名称使用,因为 TEMP
是 Windows 预定义的重要环境变量。它的值是当前用户帐户临时文件目录的完整路径名。有关详细信息,请参阅维基百科文章 Windows 环境变量。
一种方法是使用延迟扩展,正如 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。