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文件

时间: 2024-10-05 04:45:10

DOS 批处理 修改xml文件的相关文章

myeclipse修改xml文件字体大小

myeclipse中怎么修改xml文件的字体大小呢?网上搜了很多,得到的答案基本都是: window--preferences--General--appearance--colors   and   fonts--basic--text font 其实这项只能修改java文件的字体大小,并不能修改xml文件的字体,如果要修改xml文件字体大小,点击 修改这项!

Android修改XML文件

最近在项目中需要使用XML记录数据,网上这方面的文章较少,记录一下 使用DOM方式 [java] view plaincopy /** * 追加内容到XML文档 * @param instructions * @throws ParserConfigurationException * @throws SAXException * @throws IOException * @throws TransformerException */ public void append2XML(String

Dos批处理命令bat文件运行完以后自动关闭dos窗口的方法

Dos 批处理命令 bat Dos 批处理命令 bat 文件运行完以后自动关闭 dos 窗口的方法: ???? ? ? 很多人运行完批处理命令发现 dos 窗口不能自动关闭,那是因为你在 bat 文件中直接执行了需要运行的某些外部程序, 如果希望 dos 窗口自动关闭, 那么, 你可以使用 start 命令来执行该外部程序, 而不是直接写上一行来执行. 例子说 明: ???? ? ? start?"CS"?"c:\programme?files\cs\half-life.ex

使用Dom4j修改XML文件

代码如下: 需要使用的jar包除了dom4j的jar包之外,还需要jar包:jaxen-1.1-beta-6.jar 1 package xml; 2 3 import org.dom4j.Document; 4 import org.dom4j.Element; 5 import org.dom4j.Attribute; 6 import java.util.List; 7 import java.util.Iterator; 8 import org.dom4j.io.XMLWriter;

mybatis修改xml文件不重启服务方法

package com.st.tks.utils.mybatis; import com.google.common.collect.Sets;import org.apache.commons.lang3.StringUtils;import org.apache.ibatis.builder.xml.XMLMapperBuilder;import org.apache.ibatis.executor.ErrorContext;import org.apache.ibatis.session.

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

[工程截图] [person.xml]准备一个xml文件 <?xml version="1.0" encoding="UTF-8"?> <students> <student id="88888" phone="15888888888" sex="男"> <name>张三</name> <age>18</age> <s

[python小记]使用lxml修改xml文件,并遍历目录

这次的目的是遍历目录,把目标文件及相应的目录信息更新到xml文件中.在经过痛苦的摸索之后,从python自带的ElementTree投奔向了lxml.而弃用自带的ElementTree的原因就是,namespace. XML命名空间 作用是为避免元素命名冲突,当出现命名冲突的时候,可以使用前缀来避免命名冲突,就如: <h:table> <h:tr> <h:td>App Store</h:td> <h:td>Google Play</h:td

bat 批处理修改多层文件夹名称

最近朋友一直抱怨说有一堆的文件夹需要重新修改名称,一个一个处理非常浪费时间,问有没有什么简洁的方法进行处理. 在明白了朋友的需求后,想到可以写个bat批处理文件进行处理. 首先分析下朋友的需求: 原文件夹名称及结构:D:\ ----test01 ----test02_XXXX_XXXX ----test03_XXXX_XXXX 需要将test01文件夹下的test02下划线后的内容去掉,并将文件夹test02下的test03文件夹下划线后面的内容去掉. 修改为: ----test01 ----t

C# 修改XML文件key的value值

1 xmlDocument = new XmlDocument(); 2 xmlDocument.Load(xmlPath); 3 nsmgr = new XmlNamespaceManager(xmlDocument.NameTable); 4 XmlNode xmlNode = xmlDocument.SelectSingleNode(@"/AppItems/AppItem[@key='" + nodeName + "']", nsmgr); 5 XmlElem