Board logo

标题: [文本处理] 批处理如何修改xml文件中指定位置/特征的字符串(更改指定节点/元素/标签里的文本) [打印本页]

作者: ttrrf    时间: 2016-4-30 13:24     标题: 批处理如何修改xml文件中指定位置/特征的字符串(更改指定节点/元素/标签里的文本)

本帖最后由 pcl_test 于 2017-4-30 07:42 编辑

我这有一个xml文件:integers.xml内容是:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <integer name="config_shortAnimTime">200</integer>
    <integer name="config_mediumAnimTime">400</integer>
    <integer name="config_longAnimTime">500</integer>
   
    <integer name="status_bar_notification_info_maxnum">999</integer>
……
    <integer name="preference_fragment_scrollbarStyle">0x2000000</integer>
    <integer name="kg_carousel_angle">75</integer>
    <integer name="kg_glowpad_rotation_offset">0</integer>
    <integer name="resumeboost_timeout_param">300</integer>
    </resources>
红色部分我要把数字缩小2倍,能否用批处理一次性修改。代码尽量高效而不要太复杂的。大大们帮忙看看。
作者: CrLf    时间: 2016-4-30 16:49

使用第三方工具 gawk
  1. @gawk -F"<|>" "$2~/shortAnimTime|mediumAnimTime|longAnimTime|resumeboost_timeout_param/{$0=$1 \"^<\" $2 \"^>\" ($3/2) \"^<\" $4 \"^>\"};1" 旧.xml >新.xml
复制代码

作者: ttrrf    时间: 2016-4-30 18:59

回复 2# CrLf


    我的系统是64位的。好像没有64位的gawk工具呀
作者: CrLf    时间: 2016-4-30 19:02

回复 3# ttrrf


    32 位的 gawk 就能胜任
作者: ttrrf    时间: 2016-4-30 19:06

回复 4# CrLf


    哦!谢谢!
作者: ttrrf    时间: 2016-4-30 19:16

回复 4# CrLf


    测试通过。感谢,向你学习。但是今天我不能评分了。不好意思
作者: ttrrf    时间: 2016-4-30 19:36

回复 4# CrLf


    如果我要把数字缩小3倍那怎么改?
作者: CrLf    时间: 2016-4-30 19:48

回复 7# ttrrf


    把 ($3/2) 这里的 2 改成你想要的数字
作者: ttrrf    时间: 2016-4-30 19:56

回复 8# CrLf


    好的,谢谢!
作者: bailong360    时间: 2016-4-30 21:05

  1. Set FSO   = CreateObject("Scripting.FileSystemObject")
  2. Set File  = FSO.OpenTextFile("integers.xml", 1, False)
  3. Set File2 = FSO.OpenTextFile("integers2.xml", 2, True)
  4. Set RegEx = New RegExp
  5.     RegEx.Pattern = "shortAnimTime|mediumAnimTime|longAnimTime|resumeboost_timeout_param"
  6.     RegEx.IgnoreCase = True
  7. Set RegEx2 = New RegExp
  8.     RegEx2.Pattern = "[0-9]+"
  9.     RegEx2.IgnoreCase = True
  10. While Not File.AtEndOfStream
  11.     Str = File.ReadLine
  12.     If RegEx.Test(Str) Then
  13.         Set Matches = RegEx2.Execute(Str)
  14.         For Each Match In Matches
  15.             Num = Match / 2
  16.         Next
  17.         Str = RegEx2.Replace(Str, Num)
  18.     End If
  19.     File2.WriteLine Str
  20. WEnd
复制代码
  1. var FSO   = new ActiveXObject('Scripting.FileSystemObject');
  2. var File  = FSO.OpenTextFile('integers.xml', 1);
  3. var File2 = FSO.OpenTextFile("integers2.xml", 2, true);
  4. while (!File.AtEndOfStream) {
  5.     str = File.ReadLine();
  6.     if (/shortAnimTime|mediumAnimTime|longAnimTime|resumeboost_timeout_param/.test(str)) {
  7.         str = str.replace(/\d+/, function ($0){return $0 / 2});
  8.     }
  9.     File2.WriteLine(str);
  10. }
复制代码
练手练手,话说VBS使用正则略复杂




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