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

前端之家收集整理的这篇文章主要介绍了批处理替换xml文件指定内容前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

由于常常需要切换IP地址的配置文件,多个文件修改,其实最简单的就是edittext++ 查找替换

但是有的时候就是抽风,闲的蛋疼,想编写一个windows批处理文件进行修改,想想应该挺小菜的,网上应该容易找的到。。

万万没想到。。。

记下来,万一有谁和我一样抽风...,提供个参考

  1. @echo off & setlocal enabledelayedexpansion
  2.  
  3. echo ***请输入需要操作的序号***
  4. echo.
  5. echo 1.替换152服务器为...服务器
  6. echo.
  7. echo 2.替换...服务器为152服务器
  8. echo.
  9. set /p num=请输入操作选项:
  10. chcp 65001
  11. set dscfgdir=/文件目录
  12. set apachedir=d:\目录
  13. if %num%==1 (
  14. cd /d %apachedir%
  15. for /f "tokens=*" %%i in (context.xml) do (
  16. if "%%i"=="" (echo.) else (set "line=%%i" & call :chg)
  17. )>>context.tmp
  18. for /f "tokens=*" %%i in (server.xml) do (
  19. if "%%i"=="" (echo.) else (set "line=%%i" & call :chg)
  20. )>>server.tmp
  21. call :modify
  22.  
  23. cd %dscfgdir%
  24. for /f "tokens=*" %%i in (dscfg.xml) do (
  25. if "%%i"=="" (echo.) else (set "line=%%i" & call :chg)
  26. )>>dscfg.tmp
  27. call :modifydsc
  28. ) else if %num% ==2 (
  29. cd /d %apachedir%
  30. for /f "tokens=*" %%i in (context.xml) do (
  31. if "%%i"=="" (echo.) else (set "line=%%i" & call :chg2)>>context.tmp
  32. )
  33. for /f "tokens=*" %%i in (server.xml) do (
  34. if "%%i"=="" (echo.) else (set "line=%%i" & call :chg2)>>server.tmp
  35. )
  36. call :modify
  37. cd %dscfgdir%
  38. for /f "tokens=*" %%i in (dscfg.xml) do (
  39. if "%%i"=="" (echo.) else (set "line=%%i" & call :chg2)
  40. )>>dscfg.tmp
  41. call :modifydsc
  42. ) else (echo 无效选项)
  43. pause
  44. exit
  45.  
  46. :chg
  47. rem 进行替换操作
  48. set "line=!line:需要替换的字符=替换的字符!"
  49. echo !line!
  50. goto :eof
  51.  
  52. :chg2
  53. set "line=!line:需要替换的字符=替换的字符!"
  54. echo !line!
  55. goto :eof
  56.  
  57. :modify
  58. if exist context.bak (del context.bak)
  59. ren context.xml context.bak
  60. ren context.tmp context.xml
  61. if exist server.bak (del server.bak)
  62. ren server.xml server.bak
  63. ren server.tmp server.xml
  64.  
  65. :modifydsc
  66. if exist dscfg.bak (del dscfg.bak)
  67. ren dscfg.xml dscfg.bak
  68. ren dscfg.tmp dscfg.xml

chcp65001是解决xml中中文字符的

你以为这就完了,,还有一个更坑的玩意儿,!与windows的延迟变量之间的。。。按照上边输出,!是输不出的

需要在for循环中添加

  1. for /f "tokens=*" %%i in (context.xml) do (
  2. if "%%i"=="" (echo.) else (
  3. setlocal disabledelayedexpansion
  4. set "line=%%i" & call :chg)
  5. )>>context.tmp

for循环中都改真这个样子,总共四个。。

  1. :chg
  2. rem 进行替换操作
  3. setlocal enabledelayedexpansion
  4. set "line=!line:10.2.0.152=10.8.2.35!"
  5. echo !line!
  6. goto :eof
chg,chg2都改成这个样子

这是临时关闭、开启延迟变量

提供一个最简化的例子,一共方便查看

  1. @echo off & setlocal enabledelayedexpansion
  2. chcp 65001
  3.  
  4. for /f "tokens=*" %%i in (context.txt) do (
  5. setlocal disabledelayedexpansion
  6. set line=%%i
  7. setlocal enabledelayedexpansion
  8. echo !line!
  9. )
  10. pause

猜你在找的XML相关文章