由于常常需要切换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,chg2都改成这个样子
- :chg
- rem 进行替换操作
- setlocal enabledelayedexpansion
- set "line=!line:10.2.0.152=10.8.2.35!"
- echo !line!
- goto :eof
这是临时关闭、开启延迟变量
提供一个最简化的例子,一共方便查看
- @echo off & setlocal enabledelayedexpansion
- chcp 65001
- for /f "tokens=*" %%i in (context.txt) do (
- setlocal disabledelayedexpansion
- set line=%%i
- setlocal enabledelayedexpansion
- echo !line!
- )
- pause