2011-12-30 6 views
0

У меня есть файл, в котором написаны команды 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 или какой-либо другой простой способ для достижения этой цели?

ответ

1

Как об этом:

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

+0

Все элементы находятся в одной строке. После каждого как добавить новую строку. – Samselvaprabu

+0

Спасибо, друг. Я принял это как ответ. Так что вместо outerxml, если мы будем использовать save, у него будет пространство между элементами. Huh? – Samselvaprabu

2

Следующая 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

+0

Просто сделайте то же самое: скопируйте код, сохраните его в conv.bat, скопируйте свои входные данные в текстовый файл и запустите. Он работает нормально на xp и w7. Возможно, прокомментируйте строку '@echo off' и посмотрите, что произойдет. –

+0

Я проверял в Xp и 2003. Это не работает. – Samselvaprabu