之前对批处理和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. ssh 命令行通过私钥登录其它设备

    ssh -i root(私钥文件) root@IP (被访问的服务器IP) 这里备份一下了

  2. C#中正则表达式只取前N个匹配结果

    用Regex.Matches方法可以得到同指定正则表达式对应的所有匹配结果.有时,所有匹配结果可能有成千上万个,考虑到性能效率的因素,只需要取出前N个匹配结果.下面的代码演示了做法: 需求:取字符串中 ...

  3. 【JavsScript】JavaScript MVC框架PK:Angular、Backbone、CanJS与Ember

    摘要:选择JavaScript MVC框架很难.一方面要考虑的因素非常多,另一方面这种框架也非常多,而要从中选择一个合适的,还真得费一番心思.本文对JavaScript MVC框架Angular.Ba ...

  4. [ES6] 15. Generators -- 2

    Using for..of statement: function* greeting(){ console.log(`Generators are "lazy"`); yield ...

  5. Android NDK: WARNING: APP_PLATFORM android-14 is larger than android:minSdkVersion 8

    在使用Eclipse 直接编译NDK,有时候会报类似以下错误 Android NDK: WARNING: APP_PLATFORM android-14 is larger than android: ...

  6. stm32f107vc在IAR环境下,引用库函数的工程文件的配置方法

    stm32做开发很方便的一个原因是大家可以稍稍放松对于硬件寄存器等的设置,因为stm32有了非常丰富和实用的库函数,外设文件等等,所以我们在使用的时候可以更加关注程序开发的过程和逻辑关系.但是,在开发 ...

  7. VS环境下搭建自己NuGet服务器

    一.NuGet服务端的搭建 环境:.NET 4.5 + VS2015 + NuGet.Server 2.10.1 1.建一个空的Web项目,取名叫NuGetServer 2.通过NuGet安装NuGe ...

  8. [转]Oracle快速入门

    原文出处:http://blog.csdn.net/yueguanghaidao/article/details/7019377 select * from scott.salgrade; /*解锁s ...

  9. 终端I/O之终端标识

    历史沿袭至今,在大多数UNIX系统中,控制终端的名字是/dev/tty. POSIX.1提供了一个运行时函数,可被用来确定控制终端的名字. #include <stdio.h> char ...

  10. ubuntu搭建LAMP服务器

    新手记录下...... 安装apache apt-get install apache2 安装mysql apt-get install mysql-server 安装php apt-get inst ...