现在有两个文件:
文件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替换。
批处理还不太懂,希望批处理大侠们帮帮忙,谢谢
你好,非常感谢你的回答,我测试了一下,第一次执行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
)
在最后替换后a.xml & b.text 都没删掉了
追答如果处理前b.txt里只有一行了,最后就不再生成b.txt了,相当于清了。如果想最后清理a.xml,bat改为如下内容:
@echo off
@if not exist b.txt (
@del a.xml
@goto X
@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
)
:X