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

由于常常需要切换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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值