批处理替换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 :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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |