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