Board logo

标题: [文本处理] 批处理如何实现xml文件匹配并替换? [打印本页]

作者: wodesitanfu    时间: 2013-3-15 14:25     标题: 批处理如何实现xml文件匹配并替换?

在一个xml文件中,有几千行,某些行中,含有如下代码
<BYTE NAME="Bay Slot Number">0</BYTE>
<BYTE NAME="Bay Slot Number">1</BYTE>
<BYTE NAME="Bay Slot Number">2</BYTE>
..........
<BYTE NAME="Bay Slot Number">E</BYTE>
现在,我想用批处理,把里面的某些代码,按如下关系替换
"Bay Slot Number">n ->"Bay Slot Number">n+1
所以换算完后
<BYTE NAME="Bay Slot Number">0</BYTE>    转换成 <BYTE NAME="Bay Slot Number">1</BYTE>
  <BYTE NAME="Bay Slot Number">1</BYTE>   转换成<BYTE NAME="Bay Slot Number">2 </BYTE>
....
我的难点如下
1  Bay Slot Number">0替换的是,我是用set去替换,但貌似"和>号都无法处理
2 9转换成A怎么转?A转换为B类似问题似。先判断为A,然后转ASIC码,再加1?还是干脆用16个判断,匹配后再替换?
作者: BAT-VBS    时间: 2013-3-15 14:51

把你自己写的代码贴出来看看
作者: wodesitanfu    时间: 2013-3-15 15:41

(for /f "tokens=1* delims=:" %%a in ('findstr /n ".*" u90mpb_20130131.xml') do (
    set str=%%b
    setlocal enabledelayedexpansion
    if "!str!" neq "" (
        set str=!str:500A0D10=%sasadd:~0,8%!
    )
    if "!str!" neq "" (
        set str=!str:008A7B3F=%sasadd:~8,6%3F!
    )
    if "!str!" neq "" (
        set str=!str:Bay Slot Number”">0=Bay Slot Number">1!  ::先尝试转换一个,但这么做实现不了替换
    )

    echo,!str!
    endlocal
))>tempA_3F.xml
作者: terse    时间: 2013-3-15 15:59

试试这样
  1. set "str=!str:Bay Slot Number"^>0=Bay Slot Number">1!"
复制代码

作者: apang    时间: 2013-3-15 16:29

目测纯批的话,循环次数较多,试试vbs
  1. Set FSO = CreateObject("Scripting.FileSystemObject")
  2. Text = FSO.OpenTextFile("a.xml").ReadAll
  3. For i = 14 to 0 step - 1
  4.    a = hex(i) : b = hex(i+1)
  5.    a = "<BYTE NAME=""Bay Slot Number"">" & a
  6.    b = "<BYTE NAME=""Bay Slot Number"">" & b
  7.    Text = Replace(Text,a,b)
  8. Next
  9. FSO.CreateTextFile("b.xml",True).Write Text
  10. MsgBox "OK"
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2