如何将批处理文件转换为XML文件

问题描述:

我有一个写入Xcopy命令的文件。现在我需要将它们移动到xml文件格式,以便我可以在Msbuild中执行它们。如何将批处理文件转换为XML文件

以下是我的文件内容

xcopy File1 Destinationfolder1 
Xcopy File2 DestinationFolder2 
Xcopy File3 DestinationFolder1 

我想使它为XML文件如下

<Xcopy include="File1"> 
<Destination> DestinationFolder1 </Destination> 
</Xcopy> 

<Xcopy Include="File2"> 
<Destination> DestinationFolder2 </Destination> 
</Xcopy> 

and so on.. 

是否有任何PowerShell脚本或其他一些简单的方法来实现这一目标?

如何:

clear 
$res = Get-Content c:\PST\1.txt 

$xml = [xml] "<root namespace=`"namespace`"></root>" 
foreach($line in $res) 
{ 
# If words are separated by more than one whitespace 
$line=$line -replace '\s+', ' ' 
$values = $line.Split(" ") 
$insert = [xml] [string]::Format("<Xcopy include=`"{0}`"> <Destination>{1}</Destination> </Xcopy>", $values[1], $values[2]) 
$importNode = $xml.ImportNode($insert.DocumentElement, $true) 
$xml.root.AppendChild($importNode) |Out-Null 
} 
$xml.Save("c:\PST\result.xml") 

这是工作,但我敢肯定的PowerShell大师可以让它更简单

+0

好友,这是一个很大的帮助。输出xml单行显示。如何在每个节点之间添加换行符? 。对不起,我最近开始使用PowerShell,所以我无法自行修复 – Samselvaprabu 2011-12-30 13:22:22

+0

所有的元素都是单行的。每个之后如何添加换行符。 – Samselvaprabu 2011-12-30 13:32:09

+0

感谢哥们。我已经接受它作为答案。因此,如果我们使用保存,而不是outerxml,它将在元素之间有空格。 – Samselvaprabu 2011-12-30 13:45:45

下面的CMD批处理文件给出正是你所寻找的输出:

@echo off 
rem Syntax: conv inputfile resultfile 
set input=%1 
set result=%2 
copy nul %result% 
for /F "tokens=2,3*" %%G in (%input%) do (
    echo ^<Xcopy include="%%G"^> >> %result% 
    echo ^<Destination^> %%H ^</Destination^> >> %result% 
    echo ^</Xcopy^> >> %result% 
    echo. >> %result% 
) 
+0

伙计,它总是产生空文件。我已将您的代码复制到批处理文件(“conv.bat”)中。我把它叫做:conv Sourcefile.txt destinationfile.xml。但它会在你的脚本或某些事情中失败任何错字错误? – Samselvaprabu 2011-12-31 05:54:29

+0

刚做完同样的事情:复制代码,将其保存到conv.bat,将输入数据复制到文本文件中,然后运行。它可以在xp和w7上正常工作。也许可以评论'@echo off'这行,看看会发生什么。 – 2011-12-31 10:10:20

+0

我在Xp和2003中进行了验证。它不起作用。 – Samselvaprabu 2012-01-02 04:22:55