2017-12-20 41 views
0

포크,어떻게하면 bat 명령으로 xml 파일 값을 변경할 수 있습니까? 'sed'가 내부 또는 외부 명령으로 인식되지 않습니다.

'sed'를 사용하여 XML 파일 값을 업데이트하려고합니다. bat 명령이 인식되지 않습니다.

CODE :

**@echo off 
SET PREFIX=ROOM107- 
SET SUFFIX=\Admin 
SET /P PCNAME1=Please enter your desired NUMBER: 
SET PCNAME=%PREFIX%%PCNAME1%%SUFFIX% 

sed -i "s#<UserId>Admin</UserId>#<UserId>%PCNAME%</UserId>#" changexml.xml 

pause** 

BAT 명령을 사용하여 아래의 XML 파일을 업데이트하는 다른 방법은?

XML은 :

<xml> 
<Main_group> 
    <group_1> 
     <add key="A" value="AMERICA"/> 
     <add key="B" value="BALL"/> 
    </group_1> 
    <gropup_2> 
     <add key="A" value="AMERICA"/> 
     <add key="B" value="BALL"/> 
    </group_2> 
<Main_group> 
<SubGroup> 
    <add key="A" value="AMERICA"/> 
    <add key="B" value="BALL"/> 
</SubGroup> 
</xml> 

이를 읽기위한

<SubGroup> 
    <add key="A" value="USA"/> 
    <add key="B" value="Basket Ball"/> 
</SubGroup> 

아래 감사와 같은 'A'와 노드 의 'B'의 값을 업데이트하려고!

+0

'sed'는 * nix 도구이므로 MSWindows에 설치해야 사용할 수 있습니다. 그러나 'sed'는 XML을 처리하는 도구가 아닙니다. – choroba

+0

@Cyrus - 링크 덕분에, 그 링크는 리눅스 OS를 지원합니다. 메신저도 그 BAT 명령을 가진 Windows 플랫폼을 찾고 – Riv

+0

@ choroba - 정보 주셔서 감사! – Riv

답변

1

당신의 XML은 내가 편집 한 있도록 유효하지 않습니다 (xml.txt로 저장) 조금 :

<xml> 
    <Main_group> 
     <group_1> 
      <add key="A" value="AMERICA"/> 
      <add key="B" value="BALL"/> 
     </group_1> 
     <group_2> 
      <add key="A" value="AMERICA"/> 
      <add key="B" value="BALL"/> 
     </group_2> 
    </Main_group> 
    <SubGroup> 
     <add key="A" value="AMERICA"/> 
     <add key="B" value="BALL"/> 
    </SubGroup> 
</xml> 

여기 (같은 디렉토리에 있어야합니다) 자신의 값을 편집 박쥐 파일입니다. 외부 프로그램을 설치해야하며 xml은 정규식을 사용하지 않고 xml로 파싱됩니다. 당신은 하드 코드 된 값을 변경할 수 있습니다

@if (@X)==(@Y) @end /* JScript comment 
    @echo off 


    cscript //E:JScript //nologo "%~f0" 

    exit /b %errorlevel% 

@if (@X)==(@Y) @end JScript comment */ 

//------------------------ 
// -- hard coded values -- 
var originalFile="xml.txt"; 
var newFile="xml1.xml"; 

var xpath1='//SubGroup/add[@key="A"]/@value'; 
var xpath2='//SubGroup/add[@key="B"]/@value'; 

var newValue1="USA"; 
var newValue2="Basket Ball"; 

//--------------------------- 

var objDoc; 
var objNodes; 
var loaded; 

try { 
    objDoc = WScript.CreateObject("MSXML.DOMDocument"); 
    loaded=objDoc.load(originalFile); 
} catch (err){ 
    WScript.Echo("Error while parsing the xml"); 
    WScript.Echo(err.message); 
    WScript.Quit(1); 
} 

if(!loaded){ 
    WScript.Echo("Error while parsing the xml"); 
    WScript.Echo(""); 
    WScript.Echo("Error Code:"+objDoc.parseError.errorCode); 
    WScript.Echo(""); 
    WScript.Echo("Line:"+objDoc.parseError.line+" Posotion:"+objDoc.parseError.filepos); 
    WScript.Echo(""); 
    WScript.Echo("Reason:"+objDoc.parseError.reason); 
    WScript.Echo(""); 
    WScript.Echo("URL:"+objDoc.parseError.url); 
    WScript.Echo(""); 
    WScript.Echo(objDoc.parseError.srcText); 
    WScript.Quit(5); 
} 



var node1=objDoc.selectSingleNode(xpath1); 
var node2=objDoc.selectSingleNode(xpath2); 
node1.text=newValue1; 
node2.text=newValue2; 


objDoc.save(newFile); 
+0

오류를 성공적으로 실행하지 못했습니다. 이유 : XML 문서에서 최상위 요소 하나만 허용됩니다. – Riv

+0

새 파일 대신에 동일한 파일을 업데이트하려고합니다. – Riv

+0

@Riv - 'objDoc.save (originalFile); – npocmaka