找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 26233|回复: 9

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

[复制链接]
发表于 2016-4-30 13:24:14 | 显示全部楼层 |阅读模式
本帖最后由 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倍,能否用批处理一次性修改。代码尽量高效而不要太复杂的。大大们帮忙看看。

评分

参与人数 1PB -4 收起 理由
pcl_test -4 未按版规发帖

查看全部评分

发表于 2016-4-30 16:49:41 | 显示全部楼层
使用第三方工具 gawk
  1. @gawk -F"<|>" "$2~/shortAnimTime|mediumAnimTime|longAnimTime|resumeboost_timeout_param/{$0=$1 "^<" $2 "^>" ($3/2) "^<" $4 "^>"};1" 旧.xml >新.xml
复制代码
 楼主| 发表于 2016-4-30 18:59:11 | 显示全部楼层
回复 2# CrLf


    我的系统是64位的。好像没有64位的gawk工具呀
发表于 2016-4-30 19:02:07 | 显示全部楼层
回复 3# ttrrf


    32 位的 gawk 就能胜任
 楼主| 发表于 2016-4-30 19:06:55 | 显示全部楼层
回复 4# CrLf


    哦!谢谢!
 楼主| 发表于 2016-4-30 19:16:31 | 显示全部楼层
回复 4# CrLf


    测试通过。感谢,向你学习。但是今天我不能评分了。不好意思
 楼主| 发表于 2016-4-30 19:36:19 | 显示全部楼层
回复 4# CrLf


    如果我要把数字缩小3倍那怎么改?
发表于 2016-4-30 19:48:49 | 显示全部楼层
回复 7# ttrrf


    把 ($3/2) 这里的 2 改成你想要的数字
 楼主| 发表于 2016-4-30 19:56:54 | 显示全部楼层
回复 8# CrLf


    好的,谢谢!
发表于 2016-4-30 21:05:17 | 显示全部楼层
  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使用正则略复杂
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-19 05:14 , Processed in 0.017237 second(s), 8 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表