之前对批处理和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文件的更多相关文章

  1. MyEclipse如何修改XML文件默认行宽

    1.MyEclipse如何修改XML文件默认行宽 Windows--->Preferences--->搜索xml--->XML--->XML Source--->Form ...

  2. MyEclipse如何修改XML文件默认打开的编辑器

    1.MyEclipse如何修改XML文件默认打开的编辑器 Windows--->Preferences--->General--->Editors--->File Associ ...

  3. Java 操纵XML之修改XML文件

    Java 操纵XML之修改XML文件 一.JAVA DOM PARSER DOM interfaces The DOM defines several Java interfaces. Here ar ...

  4. Java&Xml教程(七)使用JDOM修改XML文件内容

    JDOM提供了非常灵活的方式操作XML文件,使用JDOM非常简单而且代码简洁可读性强.前面我们学习了如何使用JDOM解析XML文件,本节介绍如何使用JDOM修改XML文件内容. 在这个教程中,我们准备 ...

  5. Java&Xml教程(三)使用DOM方式修改XML文件内容

    DOM解析方式也可用于修改XML数据,我们可以使用它完成新增元素.删除元素.修改元素值.修改元素属性等操作. 我们的XML文件,内容如下: employee.xml <?xml version= ...

  6. C#窗体中读取修改xml文件

    由于之前没有操作过xml文件,尤其是在窗体中操作xml,脑子一直转不动,而且很抵制去做这个功能,终于还是突破了自己通过查询资料完成了这个功能,在此记录一下自己的成果. 功能说明:程序中存在的xml文件 ...

  7. 创建Xml文件与修改Xml文件

    /// <summary> /// 修改节点 /// </summary> /// <param name="user">UserSafe 实体 ...

  8. 06_XML的写入_dom4j添加、删除、修改Xml文件内容

    [工程截图] [person.xml]准备一个xml文件 <?xml version="1.0" encoding="UTF-8"?> <st ...

  9. C#程序中:如何修改xml文件中的节点(数据)

    要想在web等程序中实现动态的数据内容给新(如网页中的Flash),不会更新xml文件中的节点(数据)是远远不够的,今天在这里说一个简单的xml文件的更新,方法比较基础,很适合初学者看的,保证一看就懂 ...

随机推荐

  1. Codeforces Educational Codeforces Round 5 C. The Labyrinth 带权并查集

    C. The Labyrinth 题目连接: http://www.codeforces.com/contest/616/problem/C Description You are given a r ...

  2. poj 3635 Full Tank? ( 图上dp )

    题意: 已知每一个点的加油站的油价单位价格(即点权).每条路的长度(边权). 有q个询问.每一个询问包含起点s.终点e和油箱容量. 问从起点走到终点的最小花费.假设不可达输出impossible,否则 ...

  3. MySQL Cluster 4个数据节点压力测试--mysqlslap工具压400W写

    锅巴哥的个人建议:cluster叫电信运营商版本,所以基本上在很大的用户并发量的情况下才会用到,对连接数的线性增长要求高的场景,千兆就不用想了, 没万兆就不用玩了. 很不幸,我的就是千兆网络,我的数据 ...

  4. UVA 1484 - Alice and Bob&#39;s Trip(树形DP)

    题目链接:1484 - Alice and Bob's Trip 题意:BOB和ALICE这对狗男女在一颗树上走,BOB先走,BOB要尽量使得总路径权和大,ALICE要小,可是有个条件,就是路径权值总 ...

  5. SQL server connection KeepAlive[转]

    1.什么是SQL server TCP连接的keep Alive? 简单说,keep alive 是SQL server在建立每一个TCP 连接的时候,指定了TCP 协议的keepaliveinter ...

  6. 虚拟文件系统VFS

    Linux的文件系统是由虚拟文件系统作为媒介搭建起来的,虚拟文件系统VFS(Virtual File System)是Linux内核层实现的一种架构,为用户空间提供统一的文件操作接口.它在内核内部为不 ...

  7. Linux 2.4调度系统分析--转

    http://www.ibm.com/developerworks/cn/linux/kernel/l-k24sch/index.html 杨沙洲 (pubb@163.net)国防科技大学计算机学院 ...

  8. Qt 静态编译的问题.

    编译参数 configure -confirm-license -opensource -developer-build -static -prefix D:\libraries\Qt5.3.1s - ...

  9. Enterprise Library深入解析与灵活应用(2): 通过SqlDependency实现Cache和Database的同步

    对于一个真正的企业级的应用来说,Caching肯定是一个不得不考虑的因素,合理.有效地利用Caching对于增强应用的Performance(减少对基于Persistent storage的IO操作) ...

  10. TextRank算法提取关键词的Java实现

    转载:码农场 » TextRank算法提取关键词的Java实现 谈起自动摘要算法,常见的并且最易实现的当属TF-IDF,但是感觉TF-IDF效果一般,不如TextRank好. TextRank是在 G ...