用BAT编辑XML

我试图通过BAT修改XML文件(实际上只是一个属性的值, 版本 )。 以下是我的XML文件的简短示例:

<?xml version="1.0" encoding="utf-8"?> <APPS> <APP Version="Some.Value"> <!-- APP icon. --> <Icon>C:\Program Files (x86)\Somewhere</Icon> <Url>http://www.somewhere.com</Url> </APP> </APPS> 

以下是一个BAT文件:

 @ECHO off SETLOCAL DISABLEDELAYEDEXPANSION SET anotherVariable=New.Value (FOR /F "usebackq delims=" %%a IN (Sample.xml) DO ( SET "line=%%a" SETLOCAL ENABLEDELAYEDEXPANSION SET "newLine=!line: <APP =!" IF "!newLine!" neq "!line!" ( SET "newLine= <APP Version="%anotherVariable%">" ECHO.!newLine! ENDLOCAL ) ELSE ( SET "line=!line:*:=!" ECHO.!line! ENDLOCAL ) )) > SampleOut.xml 

但是下面是一个SampleOut.xml:

 <?xml version="1.0" encoding="utf-8"?> <APPS> <APP Version="New.Value"> <!-- APP icon. --> \Program Files (x86)\Somewhere</Icon> //www.somewhere.com</Url> </APP> </APPS> 

问题是与这些path相关的XML行(图标和Url标签)被破坏。 我希望有人能帮助我。

Solutions Collecting From Web of "用BAT编辑XML"

测试这个:

 type file.xml | repl "(<APP Version=\q).*(\q>)" "$1New.Value$2" xi >newfile.xml 

这使用一个称为repl.bat (由dbenham)的帮助器批处理文件 – 下载: https ://www.dropbox.com/s/qidqwztmetbvklt/repl.bat

repl.bat放在与批处理文件相同的文件夹中或位于路径上的文件夹中。

这应该保留评论中讨论的以下属性:

 type file.xml | repl "(<APP Version=\q).*?(\q.*>)" "$1New.Value$2" xi >newfile.xml