加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

批处理替换xml文件指定内容

发布时间:2020-12-16 02:10:40 所属栏目:百科 来源:网络整理
导读:由于常常需要切换IP地址的配置文件,多个文件修改,其实最简单的就是edittext++ 查找替换 但是有的时候就是抽风,闲的蛋疼,想编写一个windows批处理文件进行修改,想想应该挺小菜的,网上应该容易找的到。。 万万没想到。。。 记下来,万一有谁和我一样抽风

由于常常需要切换IP地址的配置文件,多个文件修改,其实最简单的就是edittext++ 查找替换

但是有的时候就是抽风,闲的蛋疼,想编写一个windows批处理文件进行修改,想想应该挺小菜的,网上应该容易找的到。。

万万没想到。。。

记下来,万一有谁和我一样抽风...,提供个参考

@echo off & setlocal enabledelayedexpansion

echo ***请输入需要操作的序号***
echo.
echo 1.替换152服务器为...服务器
echo.
echo 2.替换...服务器为152服务器
echo.
set /p num=请输入操作选项:
chcp 65001
set dscfgdir=/文件目录
set apachedir=d:文件目录
if %num%==1 (
cd /d %apachedir%
for /f "tokens=*" %%i in (context.xml) do (
	if "%%i"=="" (echo.) else (set "line=%%i" & call :chg)
)>>context.tmp
for /f "tokens=*" %%i in (server.xml) do (
	if "%%i"=="" (echo.) else (set "line=%%i" & call :chg)
)>>server.tmp
call :modify

cd %dscfgdir%
for /f "tokens=*" %%i in (dscfg.xml) do (
	if "%%i"=="" (echo.) else (set "line=%%i" & call :chg)
)>>dscfg.tmp
call :modifydsc
) else if %num% ==2 (
cd /d %apachedir%
for /f "tokens=*" %%i in (context.xml) do (
	if "%%i"=="" (echo.) else (set "line=%%i" & call :chg2)>>context.tmp
)
for /f "tokens=*" %%i in (server.xml) do (
	if "%%i"=="" (echo.) else (set "line=%%i" & call :chg2)>>server.tmp
)
call :modify
cd %dscfgdir%
for /f "tokens=*" %%i in (dscfg.xml) do (
	if "%%i"=="" (echo.) else (set "line=%%i" & call :chg2)
)>>dscfg.tmp
call :modifydsc
) else (echo 无效选项)
pause
exit

:chg
rem 进行替换操作
set "line=!line:需要替换的字符=替换的字符!"
echo !line!
goto :eof

:chg2
set "line=!line:需要替换的字符=替换的字符!"
echo !line!
goto :eof

:modify
if exist context.bak (del context.bak)
ren context.xml context.bak
ren context.tmp context.xml
if exist server.bak (del server.bak)
ren server.xml server.bak
ren server.tmp server.xml

:modifydsc
if exist dscfg.bak (del dscfg.bak)
ren dscfg.xml dscfg.bak
ren dscfg.tmp dscfg.xml

chcp65001是解决xml中中文字符的

你以为这就完了,,还有一个更坑的玩意儿,!与windows的延迟变量之间的。。。按照上边输出,!是输不出的

需要在for循环中添加

for /f "tokens=*" %%i in (context.xml) do (
	if "%%i"=="" (echo.) else (
	setlocal disabledelayedexpansion
	set "line=%%i" & call :chg)
)>>context.tmp

for循环中都改真这个样子,总共四个。。

:chg
rem 进行替换操作
setlocal enabledelayedexpansion
set "line=!line:10.2.0.152=10.8.2.35!"
echo !line!
goto :eof
chg,chg2都改成这个样子

这是临时关闭、开启延迟变量

提供一个最简化的例子,一共方便查看

@echo off & setlocal enabledelayedexpansion
chcp 65001

for /f "tokens=*" %%i in (context.txt) do (
	setlocal disabledelayedexpansion
	set line=%%i
	setlocal enabledelayedexpansion
	echo !line!	
)
pause

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读