[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 批处理如何实现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个判断,匹配后再替换?

目测纯批的话,循环次数较多,试试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"
复制代码

TOP

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

TOP

(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

TOP

把你自己写的代码贴出来看看

TOP

返回列表