使用<angle bracket =“”> </angle>批量写入文本文件

时间:2015-01-08 17:49:27

标签: xml batch-file

我正在尝试使用批处理脚本动态创建一个小型XML文件,但是在编写以尖括号开头和结尾的行时遇到问题。

1)如果我这样做:

set foo=^<bar^>
echo %foo% > test.txt

这导致

> was unexpected at this time.
echo <bar> > test.txt


2)如果我用引号:echo "%foo%" > test.txt包围echo statment变量,它会成功写入文本文件。然而,它显然包括我不能拥有的引号。


3)然后我想“好吧,它必须只是开头和结尾的尖括号......”所以我在尖括号前后添加了一个字符:

set foo=a^<bar^>a
echo %foo% > test.txt

这导致了一些奇怪的输出,看起来我的括号正在编号,然后它正在寻找一个文件?

echo a 0<bar 1>test.txt
The system cannot find the file specified.


我以前写过基本的批处理脚本,但感觉我在这里过头了......感谢任何帮助!

4 个答案:

答案 0 :(得分:4)

试试这个:

setlocal ENABLEDELAYEDEXPANSION

set foo=^<bar^>
echo !foo! > test.txt

endlocal

使用延迟展开,并将%替换为!会导致对其进行不同的评估。

答案 1 :(得分:3)

如果使用您需要的管道:

set foo=^^^<bar^^^>

答案 2 :(得分:2)

您需要考虑双重替代:

set foo=^^^<bar^^^>
echo %foo% > test.txt

答案 3 :(得分:1)

  

我正在尝试使用批处理脚本动态创建一个小型XML文件

停止你正在做的事情,废弃它。批处理脚本不是您应该用来创建XML的工具,即使您可以将其打开足够长的时间以使其在特定情况下工作,但它仍然不是正确的工具创建XML文件。

如果您想要无处不在,无需任何配置或特殊权限,则可以在每个Windows机器上创建XML,这可以使用实际的XML API(MSXML2)在VBScript中完成。

对于无处不在的,需要一些配置和权限的方法,您可以转向PowerShell。

如果您更仔细地指定所需的输出,我将提供代码示例。


在评论中跟进OP的请求,这是使用VBScript的示例性设置。关键点当然不是要使用的工具,而是使用对XML具有语义理解的 工具。

基本XML模板,例如project_template.xml

<project outputDir="" baseDir="" xmlns="http://confuser.codeplex.com">
  <rule pattern="true" preset="maximum" inherit="false" />
</project> 

VBScript动态填充它,例如project.vbs

Option Explicit

Const NODE_ELEMENT = 1
Const CONFUSER_NS = "http://confuser.codeplex.com"

Dim doc, moduleElem, args, arg

Set args = WScript.Arguments
Set doc = CreateObject("MSXML2.DOMDocument")

doc.async = False
doc.load "project_template.xml"

If doc.parseError.errorCode Then
  WScript.Echo doc.parseError
  WScript.Quit 1
End If

For Each arg In args.Named
  doc.documentElement.setAttribute arg, args.Named(arg)
Next

For Each arg In args.Unnamed
  Set moduleElem = doc.createNode(NODE_ELEMENT, "module", CONFUSER_NS)
  moduleElem.setAttribute "path", arg
  doc.documentElement.appendChild moduleElem
Next

Doc.save "project.xml"

用法:

cscript /nologo project.vbs /outputDir:"xx1" /baseDir:"xx2" "xx3" "xx4" "xx5"

输出(保存为project.xml

<project outputDir="xx1" baseDir="xx2" xmlns="http://confuser.codeplex.com">
  <rule pattern="true" preset="maximum" inherit="false"/>
  <module path="xx3"/><module path="xx4"/><module path="xx5"/>
</project>