DOS 批处理 修改xml文件
之前对批处理和dos只停留在cd ping ipconfig水平,我以为改个文件应该很简单吧,把文件读出来做个替换再写回去不就欧了,百度个例子改改,那还不是分分钟的事,哪知道事实比想的要复杂的多。
我要修改的是这样一个文件内容:
....
mylove=“******”
....
mylove=“******”单独占一行,我只需修改*号部分。
首先我想用set命令把一个文件内容赋值给一个变量,各种尝试最后放弃了,本来以为set命令的a开关可以实现,哪知道这货只支持运算符,强烈建议a开关支持表达式,类似 set /a xml= "type test.xml"
网上看大家的代码,对文件操作大多用for命令,按行读取赋值给变量,如下:
setlocal enabledelayedexpansion
set xml=""
for /f "delims=" %%a in ('type "mylove.xml"')
do ( set xml=!xml!%%a )
这样确实可以。
注:要想修改一个声明的变量时需要启动延时命令setlocal enabledelayedexpansion,使用时的'%'变成‘!’
再用set 被替换xml:替换xml替换下,再写回到文件,问题是我写的文件中包含 ‘!’字符,由于启用了延时命令,echo !xml! > new.xml的时候会出问题,无奈只能把延时命令善了。
最后用了笨方法,每读一行写一行到临时文件,如果读到我要修改的那行,就把新的行写进去。
期间遇到的问题有:
1.对空行(可能包含空格或tab也可能不包含)echo >new.xml 输出的内容是 echo处于啥啥状态,本来想用set :替换,怎么都替换不干净,最后还是笨方法,先输出一个到一个临时文件temp1.xml,再重读temp1.xml,过滤 echo...,输出空行命令:@echo. >new.xml
2.输出文件会有乱码,原因是文件本来是utf-8编码的,输出的时候用的gbk。修改方法是输出前执行:chcp 65001
如果你要修改的xml文件中不包含!,空行,不包含汉字或者是gbk编码的话,要好处理很多。
代码是笨了点好歹是实现了想要的结果,在这分享一点代码希望能帮助需要的人。
需要修改的文件mylove.xml内容:
...
<!-- 曾经的曾经 -->
mylove="于红"
...
批处理代码:
set newline=mylove="李畅"
for /f "delims=" %%a in ('findstr "mylove=" mylove.xml')do (
for /f "delims=" %%i in ('type "mylove.xml"') do (
if %%i==%%a (echo %newline%>>newlove.xml)else echo %%i>>newlove.xml ) ) pause
在这要感谢网络中各位战友的回答和提问,以上如有错误和不合理的地方望指正。O(∩_∩)O谢谢
DOS 批处理 修改xml文件的更多相关文章
- MyEclipse如何修改XML文件默认行宽
1.MyEclipse如何修改XML文件默认行宽 Windows--->Preferences--->搜索xml--->XML--->XML Source--->Form ...
- MyEclipse如何修改XML文件默认打开的编辑器
1.MyEclipse如何修改XML文件默认打开的编辑器 Windows--->Preferences--->General--->Editors--->File Associ ...
- Java 操纵XML之修改XML文件
Java 操纵XML之修改XML文件 一.JAVA DOM PARSER DOM interfaces The DOM defines several Java interfaces. Here ar ...
- Java&Xml教程(七)使用JDOM修改XML文件内容
JDOM提供了非常灵活的方式操作XML文件,使用JDOM非常简单而且代码简洁可读性强.前面我们学习了如何使用JDOM解析XML文件,本节介绍如何使用JDOM修改XML文件内容. 在这个教程中,我们准备 ...
- Java&Xml教程(三)使用DOM方式修改XML文件内容
DOM解析方式也可用于修改XML数据,我们可以使用它完成新增元素.删除元素.修改元素值.修改元素属性等操作. 我们的XML文件,内容如下: employee.xml <?xml version= ...
- C#窗体中读取修改xml文件
由于之前没有操作过xml文件,尤其是在窗体中操作xml,脑子一直转不动,而且很抵制去做这个功能,终于还是突破了自己通过查询资料完成了这个功能,在此记录一下自己的成果. 功能说明:程序中存在的xml文件 ...
- 创建Xml文件与修改Xml文件
/// <summary> /// 修改节点 /// </summary> /// <param name="user">UserSafe 实体 ...
- 06_XML的写入_dom4j添加、删除、修改Xml文件内容
[工程截图] [person.xml]准备一个xml文件 <?xml version="1.0" encoding="UTF-8"?> <st ...
- C#程序中:如何修改xml文件中的节点(数据)
要想在web等程序中实现动态的数据内容给新(如网页中的Flash),不会更新xml文件中的节点(数据)是远远不够的,今天在这里说一个简单的xml文件的更新,方法比较基础,很适合初学者看的,保证一看就懂 ...
随机推荐
- shared_ptr注意事项
对shared_ptr的Copy构造和Copy赋值,会改变引用计数,但是对shared_ptr中原始资源的Copy构造和Copy赋值,不会改变引用计数.因此存在下面的危险情况: 1.获取资源时,初始化 ...
- Codeforces Round #290 (Div. 2) C. Fox And Names dfs
C. Fox And Names 题目连接: http://codeforces.com/contest/510/problem/C Description Fox Ciel is going to ...
- android4.4.2 短信广播变更
近期三星陆续放出android4.4.2ROM更新包,android4.4.2对短信虽说是放开了权限,但其实是加强了限制,一台手机智能通过一个设置为默认应用的短信应用软件才能发送短信,否则就无法对短信 ...
- 【JavsScript】父子页面之间跨域通信的方法
由于同源策略的限制,JavaScript跨域的问题,一直是一个比较棘手的问题,为了解决页面之间的跨域通信,大家煞费苦心,研究了各种跨域方案.之前也有小网同学分享过一篇“跨域,不再纠结” 开始照着尝试时 ...
- asp.net负载均衡方案[转]
在前面的几篇文章中,主要谈到了在Discuz!NT中的跨站缓存数据,数据库负载均衡.但如果要实现将产品分布式布置到若干机器,组成集群来共同支撑起整个业务的话,还是有一定问题的(后面会有所介绍).下面先 ...
- oc-30-堆栈
/** 操作引用计数器的方式:每个对象内部(对象的堆内存里面)都有一个引用计数器变量,表示对象被引用的次数. 1:retainCount:获得对象的引用计数器的值 2:retain:能够让对象的计数器 ...
- tachyon 集群容错
集群容错就是HA.这次顺带也练一下hadoop的HA 环境: centos6.5+jdk1.7+hadoop2.2.0+tachyon0.5.0+zookeeper3.4.6 hadoop 192.1 ...
- 计算机网络中的TCP/UDP协议到底是怎么回事(一)
TCP/IP五层网络结构模型 物理层:物理层建立在物理通信介质的基础上,作为系统和通信介质的接口,用来实现数据链路实体间透明的比特 (bit) 流传输.只有该层为真实物理通信,其它各层为虚拟通信 数据 ...
- Enterprise Library深入解析与灵活应用(2): 通过SqlDependency实现Cache和Database的同步
对于一个真正的企业级的应用来说,Caching肯定是一个不得不考虑的因素,合理.有效地利用Caching对于增强应用的Performance(减少对基于Persistent storage的IO操作) ...
- WPF 之 文本框及密码框添加水印效果
1.文本框添加水印效果 文本框水印相对简单,不需要重写模板,仅仅需要一个 VisualBrush 和触发器验证一下Text是否为空即可. <TextBox Name="txtSerac ...