2014-07-05 4 views
0

BAT를 통해 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 파일입니다 : 다음은 내 XML 파일의 간단한 예제입니다

@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 행 (아이콘 및 URL 태그)이 손상되었습니다. 누군가가 나를 도울 수 있기를 바랍니다.

답변

2

시험이 :

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

이것은 도우미 배치 (dbenham에 의해) repl.bat라는 파일을 사용합니다 -에서 다운로드 : 배치 파일 또는 폴더에 같은 폴더에 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 속성 이후에 나오는 나머지 속성이 손실됩니다. 그럼에도 불구하고 나에게 쉬운 해결 방법은 마지막 속성으로 Version을 넣는 것이었지만 나중에 참조 할 수 있도록 버전 이후에 오는 나머지 속성을 어떻게 보존 할 것인지 예를 들어 보겠습니다.

+0

내 수정 된 답변보기 – foxidrive

+0

다시 한 번 감사드립니다. 완벽하게 작동합니다. –