如何通过bat命令更改xml文件值。 'sed'不被视为内部或外部命令

时间:2017-12-20 09:48:15

标签: batch-file sed batch-processing xmlstarlet

民间,

尝试使用'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>
     <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>

尝试更新节点的“A”和“B”的值 如下所示

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

3 个答案:

答案 0 :(得分: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>

这是一个编辑他的值的bat文件(应该在同一个目录中)。 没有 需要安装外部程序,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);

答案 1 :(得分:1)

您可能希望使用xmlstarlet来处理XML文档。

以下是安装它的链接: http://xmlstar.sourceforge.net/download.php

使用它之后,这里是处理所需更改的代码:

xmlstarlet ed [--inplace] -u '/xml/SubGroup/add[@key="A"]/@value' -v "USA" -u '/xml/SubGroup/add[@key="B"]/@value' -v "Basket Ball" changexml.xml

参数--inplace将更改原始文件。

答案 2 :(得分:0)

如果要在Windows上使用for (i in 1:length(colnames(df))) { colnames(df)[i] = toupper(colnames(df)[i]) # return() ... you don't need this } ,则必须使用MSYSCygwinWindows Subsystem for Linux等Unix环境。

然而, parse XML with RegEx 并不是一个好主意。