Замена значения в xml другим скриптом пакетной обработки
Я новичок в пакетных сценариях, и я просмотрел множество публикаций на SO, чтобы найти ответ, но мне кажется, что ничего не работает. Я пытаюсь прочитать файл XML и извлечь несколько значений, а затем найти строку в том же XML и заменить новую строку, которую я строю. У меня есть следующий код, но когда я запускаю его, test.xml, который я пытаюсь прочитать, перезаписывается.
@echo off > test.xml
setLocal enabledelayedexpansion
Здесь я нахожу значение URL из XML и сохраняю его в текст
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, port и DB и добавить теги xml для всех трех значений, как в новой строке.