用另一个字符串批处理脚本替换xml中的值

时间:2015-11-17 08:01:12

标签: windows batch-file findandmodify

我是批处理脚本的新手,我在SO上发布了很多帖子以找到答案,但似乎没有什么对我有用。我试图读取一个xml文件并提取几个值,然后在相同的xml中找到一个字符串并替换为我构建的新字符串。我有以下代码,但是当我运行它时,我试图读取的test.xml已经过完了。

@echo off > test.xml
setLocal enabledelayedexpansion

在这里,我从xml中找到URL的值并将其存储到 text

 for /f "tokens=2*delims=@" %%a in (test.xml) DO set "text=%%a"&echo "%text%"

然后我拆分 text 的值来提取IP,端口和数据库名称并将它们存储在变量中

FOR /f "tokens=1,2,3 delims=:" %%a in ("%text%") DO set "IP=%%a"&echo "%IP%"&set "PORT=%%b"&echo "%PORT%"&set "DB=%%c"&echo "%DB%"

然后我从数据库名称

中删除结束标记
FOR /f "tokens=1 delims=<" %%a in ("%DB%") DO set "SID=%%a"&echo "%SID%"

然后我设置变量来查找和替换文字

SET "old=<xa-datasource-property name="URL">jdbc:oracle:thin:%IP%:%PORT%:%DB%"
echo "%old%"

SET "new=<xa-datasource-property name="ServerName">%IP%</xa-datasource-property><xa-
datasource-property name="PortNumber">%PORT%</xa-datasource-property><xa-datasource-property name="DatabaseName">%SID%</xa-datasource-property>"

在下面的行中,我实际上逐行遍历test.xml,找到旧文本并将其替换为新值,这是我完成上述所有操作的目的。

 for /f "tokens=*" %%a in (test.xml) do (
        set str=%%a
        ECHO str=%%str:!old!=!new!%% >> newFile.xml

    )

感谢任何帮助。我花了3天时间。

我的test.xml内容:

<?xml version="1.0" encoding="UTF-8"?>
<datasources>

    <xa-datasource>
        <use-java-context>false</use-java-context>
        <jndi-name>Mach9-Gateway-DS</jndi-name> 
        <xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-

class>
        <xa-datasource-property name="URL">jdbc:oracle:thin:@localhost:8080:oracle</xa-

datasource-property>
        <xa-datasource-property name="User">abc</xa-datasource-property>
        <xa-datasource-property name="Password">pwd</xa-datasource-property>
        <isSameRM-override-value>false</isSameRM-override-value>
        <no-recover>true</no-recover>       
        <min-pool-size>10</min-pool-size>
        <max-pool-size>50</max-pool-size>
        <exception-sorter-class-name>
            org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter
        </exception-sorter-class-name>
        <track-connection-by-tx>true</track-connection-by-tx>
        <no-tx-separate-pools />
    </xa-datasource>

</datasources>

在上面的文件而不是URL属性中,我打算提取IP,port和DB,并为新字符串中的所有三个值添加xml标记。

0 个答案:

没有答案