我是批处理脚本的新手,我在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标记。