2014-07-05 179 views
0

我試圖通過BAT修改XML文件(實際上只是一個屬性的值,版本)。以下是我的XML文件的一個簡短的樣本:用BAT編輯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> 

問題與這些路徑相關的XML行(Icon和Url標籤)被破壞。我希望有人能幫助我。

回答

2

測試此:

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 
+0

你好,謝謝你的回覆,這個偉大的工程。 我只遇到了1個問題,那就是版本屬性後面的其他屬性丟失了。儘管如此,對我來說簡單的解決方法是將Version作爲最後一個屬性,但爲了將來的參考,您將如何保留版本後面的其他屬性,例如:

+0

請參閱我編輯的答案。 – foxidrive

+0

再次感謝你,它完美的作品。 –