标题: [文本处理] 批处理如何修改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- @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
- Set FSO = CreateObject("Scripting.FileSystemObject")
- Set File = FSO.OpenTextFile("integers.xml", 1, False)
- Set File2 = FSO.OpenTextFile("integers2.xml", 2, True)
- Set RegEx = New RegExp
- RegEx.Pattern = "shortAnimTime|mediumAnimTime|longAnimTime|resumeboost_timeout_param"
- RegEx.IgnoreCase = True
- Set RegEx2 = New RegExp
- RegEx2.Pattern = "[0-9]+"
- RegEx2.IgnoreCase = True
-
- While Not File.AtEndOfStream
- Str = File.ReadLine
- If RegEx.Test(Str) Then
- Set Matches = RegEx2.Execute(Str)
- For Each Match In Matches
- Num = Match / 2
- Next
- Str = RegEx2.Replace(Str, Num)
- End If
- File2.WriteLine Str
- WEnd
复制代码
- var FSO = new ActiveXObject('Scripting.FileSystemObject');
- var File = FSO.OpenTextFile('integers.xml', 1);
- var File2 = FSO.OpenTextFile("integers2.xml", 2, true);
-
- while (!File.AtEndOfStream) {
- str = File.ReadLine();
- if (/shortAnimTime|mediumAnimTime|longAnimTime|resumeboost_timeout_param/.test(str)) {
- str = str.replace(/\d+/, function ($0){return $0 / 2});
- }
- File2.WriteLine(str);
- }
复制代码
练手练手,话说VBS使用正则略复杂
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |