0

我是批处理脚本的新手,我已经阅读了大量关于 SO 的帖子以找到答案,但似乎没有什么对我有用。我正在尝试读取一个 xml 文件并提取一些值,然后在同一个 xml 中找到一个字符串并用我构建的新字符串替换。我有以下代码,但是当我运行它时,我试图读取的 test.xml 被覆盖了。

@echo off > test.xml
setLocal enabledelayedexpansion

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

 for /f "tokens=2*delims=@" %%a in (test.xml) DO set "text=%%a"&echo "%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、端口和 DB,并为所有三个值添加 xml 标记,就像在新字符串中一样。

4

0 回答 0