使用批处理脚本编辑XML文件

使用批处理脚本编辑XML文件,xml,batch-file,replace,xml-parsing,user-input,Xml,Batch File,Replace,Xml Parsing,User Input,我希望编辑位于C:\CONFIG\TEST\u CONFIG.XML中的XML文件,并替换其中的两个不同值。我希望用此文件替换以下条件: <test.tbl> CONFIG!CONFIG2 |1 T |125 **TN###** |151 **TN###** </TEST.tbl> "|125 TN###" must equal %USERINPUT1% "|151 TN###" must equal %USERINPUT2% 配置!配置2 | 1 T | 125

我希望编辑位于
C:\CONFIG\TEST\u CONFIG.XML
中的XML文件,并替换其中的两个不同值。我希望用此文件替换以下条件:

<test.tbl>
CONFIG!CONFIG2 |1 T |125 **TN###** |151 **TN###**
</TEST.tbl>

"|125 TN###" must equal %USERINPUT1%

"|151 TN###" must equal %USERINPUT2%

配置!配置2 | 1 T | 125**TN###**151**TN###**
“| 125 TN####”必须等于%USERINPUT1%
“| 151 TN####”必须等于%USERINPUT2%
我发现其他的帖子很接近,但很难找到

另一个问题是我需要保留所有的空格和特殊字符

@echo off
setlocal DisableDelayedExpansion

set USERINPUT1=First Value
set USERINPUT2=Second Field

for /F "delims=:" %%a in ('findstr /N /C:"CONFIG!CONFIG2 |1 T |125 **TN###** |151 **TN###**" C:\CONFIG\TEST_CONFIG.XML') do set num=%%a
(for /F "tokens=1* delims=:" %%a in ('findstr /N "^" C:\CONFIG\TEST_CONFIG.XML') do (
   set "line=%%b"
   setlocal EnableDelayedExpansion
   if "%%a" equ "%num%" (
      set "line=!line:|125 **TN###**=%USERINPUT1%!"
      set "line=!line:|151 **TN###**=%USERINPUT2%!"
   )
   echo(!line!
   endlocal
)) > temp.xml
move /Y temp.xml C:\CONFIG\TEST_CONFIG.XML
编辑:添加示例

input.xml:

<test.tbl>
<p>Support the free distribution of this forecast by visiting our sponsors website.<p><b>Select forecast - </b>
<a href="?fdate=140403">Tomorrow</a> / <a href="?fdate=140404">Friday</a> / <a href="?fdate=140405">Saturday</a><p><hr>
CONFIG!CONFIG2 |1 T |125 **TN###** |151 **TN###**
<h5>Viewing forecast for Thursday, 3rd April, 2014</h5><p>Forecast last reviewed on Wednesday, 02/04/14 at 16:17
</TEST.tbl>
在您的数据中,但是:

"|125 TN###" must equal %USERINPUT1%
"|151 TN###" must equal %USERINPUT2%

在缺少数据中的
**
的匹配字符串中。我在替换中添加了
**
,否则会失败…

该配置行是否以完全相同的方式出现在文件中的其他任何位置?不,这不会出现在文件中的其他任何位置。我得到“系统找不到文件'findstr/N/C:”配置!本次调查的第三方,第三方,第三方,第三方,第三方,第三方,第三方,第三方,第三方,第三方,第三方,第三方,第三方,第三方,第三方,第三方,第三方,第三方,第三方,第三方,第三方,第三方,第三方,第三方,第三方,第三方,第三方,第三方,第三方,第三方,第三方,第三方,第三方,第三方,第三方,第三方,第三方,第三方,第三方,第三方,第三方,第三方,第三方,第三方,第三方,第三方,第三方,第三方,第三方,第三方,第三方,第三方,第三方,第三方,第三方,第三方,第三方,第三方,第三方,第456!)echo(!line!endlocal)这继续并重复了23000多行很好的捕获,我更多的是使用“”来突出显示/加粗我需要更改的字段。虽然我现在确实从批处理中完全删除了“”,但仍然得到:C:\CONFIG>(set“line=”setlocal EnableDelayedExpansion if“2279”eq“576”(set)行=!行:| 125 TN#####=123!“设置行=!行:| 151 TN####=456!”)回显(!行!endlocal)超过27000行,我建议您复制我上面的示例数据,运行程序并确认您得到了我的示例输出。如果是这样,那么您应该分析您的真实数据与您发布的示例之间的差异,您发布的示例是我的程序的基础。提示:execute
findstr/N/C:“CONFIG!CONFIG2 | 1 T | 125 TN##| 151 TN###“C:\CONFIG\TEST_CONFIG.XML
;您应该得到一个结果行。。。
CONFIG!CONFIG2 |1 T |125 **TN###** |151 **TN###**
"|125 TN###" must equal %USERINPUT1%
"|151 TN###" must equal %USERINPUT2%