如何用批处理 替换xml指定节点的内容?
现在有两个文件:文件1:a.xml<file><mail>aaa@163.com</mail></file>文件2:b.txtzhangsan@126.comlisi@1...
现在有两个文件:
文件1:a.xml
<file>
<mail>aaa@163.com</mail>
</file>
文件2: b.txt
zhangsan@126.com
lisi@163.com
wangwu@sina.com
zhaoliu@163.com
tianqi@163.com
需求是批处理文件test.bat,循环的按行读取b.txt中的内容替换a.xml中<mail>节点中的mail地址。
例如,第一次执行test.bat,读取b.txt第一行zhangsan@126.com,替换<mail>节点中的mail地址:aaa@163.com
第二次执行test.bat,读取b.txt第一行lisi@163.com,替换<mail>节点中的mail地址:hangsan@126.com
以此下去,当一轮替换完后重新读取第一行mail替换。
批处理还不太懂,希望批处理大侠们帮帮忙,谢谢 展开
文件1:a.xml
<file>
<mail>aaa@163.com</mail>
</file>
文件2: b.txt
zhangsan@126.com
lisi@163.com
wangwu@sina.com
zhaoliu@163.com
tianqi@163.com
需求是批处理文件test.bat,循环的按行读取b.txt中的内容替换a.xml中<mail>节点中的mail地址。
例如,第一次执行test.bat,读取b.txt第一行zhangsan@126.com,替换<mail>节点中的mail地址:aaa@163.com
第二次执行test.bat,读取b.txt第一行lisi@163.com,替换<mail>节点中的mail地址:hangsan@126.com
以此下去,当一轮替换完后重新读取第一行mail替换。
批处理还不太懂,希望批处理大侠们帮帮忙,谢谢 展开
展开全部
如果您的a.xml文件样式固定,那倒好办了。
写一个批处理test.bat:
@echo off
@setlocal enabledelayedexpansion
@if exist a_bak.xml @del a_bak.xml
@ren b.txt b_old.txt
@ren a.xml a_bak.xml
@set li=1
@for /f %%i in (b_old.txt) do (
@set nm=%%i
if !li!==1 (
@echo ^<file^> >> a.xml
@echo ^<mail^>!nm!^<^/mail^> >> a.xml
@echo ^<^/file^> >> a.xml
) else (
@echo !nm! >> b.txt
)
@set /a li+=1
)
把test.bat与a.xml和b.txt放在一个文件夹下面,由于这段代码会重写a.xml和b.txt,因此先复制一份b.txt,防止您的list丢了。
然后每次执行test.bat时:
1、将当前a.xml和b.txt存为a_bak.xml和b_old.txt;
2、b.txt的第一行会替换a.xml中<mail>节点内容;
3、删除原有b.txt的第一行,存为新的b.txt。
只要执行过一次,除去您的“b.txt复件”,应该文件夹中有4个文件:
a.xml、a_bak.xml、b.txt、b_old.txt;
其中,a.xml永远是您最后一次生成的文件,b.txt是您接下来要用的列表;另外两个是为了防止意外帮您留的。
上述代码,已在XP下测试通过。
写一个批处理test.bat:
@echo off
@setlocal enabledelayedexpansion
@if exist a_bak.xml @del a_bak.xml
@ren b.txt b_old.txt
@ren a.xml a_bak.xml
@set li=1
@for /f %%i in (b_old.txt) do (
@set nm=%%i
if !li!==1 (
@echo ^<file^> >> a.xml
@echo ^<mail^>!nm!^<^/mail^> >> a.xml
@echo ^<^/file^> >> a.xml
) else (
@echo !nm! >> b.txt
)
@set /a li+=1
)
把test.bat与a.xml和b.txt放在一个文件夹下面,由于这段代码会重写a.xml和b.txt,因此先复制一份b.txt,防止您的list丢了。
然后每次执行test.bat时:
1、将当前a.xml和b.txt存为a_bak.xml和b_old.txt;
2、b.txt的第一行会替换a.xml中<mail>节点内容;
3、删除原有b.txt的第一行,存为新的b.txt。
只要执行过一次,除去您的“b.txt复件”,应该文件夹中有4个文件:
a.xml、a_bak.xml、b.txt、b_old.txt;
其中,a.xml永远是您最后一次生成的文件,b.txt是您接下来要用的列表;另外两个是为了防止意外帮您留的。
上述代码,已在XP下测试通过。
更多追问追答
追问
你好,非常感谢你的回答,我测试了一下,第一次执行test.bat,b.txt的第一行被删掉,a.xml 替换成功。第二次执行test.bat,a.xml 依然是zhangsan@126.com,b.txt 变成了:
lisi@163.com
wangwu@sina.com
zhaoliu@163.com
tianqi@163.com
lisi@163.com
wangwu@sina.com
zhaoliu@163.com
tianqi@163.com
请你帮忙解决一下,如果能够实现。b.txt 可以随意定义,excle , xml 格式都可以,谢谢!
追答
不好意思,按最后思路改版时,少了一行。现在更正test.bat的内容:
@echo off
@setlocal enabledelayedexpansion
@if exist a_bak.xml @del a_bak.xml
@if exist b_old.txt @del b_old.txt
@ren b.txt b_old.txt
@ren a.xml a_bak.xml
@set li=1
@for /f %%i in (b_old.txt) do (
@set nm=%%i
if !li!==1 (
@echo ^ >> a.xml
@echo ^!nm!^ >> a.xml
@echo ^ >> a.xml
) else (
@echo !nm! >> b.txt
)
@set /a li+=1
)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询