由于常常需要切换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
你以为这就完了,,还有一个更坑的玩意儿,!与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 :eofchg,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