[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] 批处理如何替换xml文件中的字符串并统计?

我有若干a.xml 分散在一个根目录下的若干子目录里, 现在想把a.xml文件里面的字符串xxxx统计并替换

如m目录下: a.xml 里有 xxxx xxxx xxxx xxxx xxxx  共5个  则 替换这些字符串 0 1 2 3 4
   n目录下: a.xml 里有 xxxx xxxx xxxx共3个 则替换为 0 1 2
   o目录下: a.xml 里有 xxxx xxxx xxxx xxxx 四个 则替换为0 1 2 3  

数字在每个xxxx字符串的原位置

请问批处理能实现这个需求吗?

regards

本帖最后由 tmplinshi 于 2012-11-17 17:32 编辑
  1. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  2. :: 工具下载地址
  3. ::     sed 4.0.7 win换行
  4. ::     http://bathome.net/thread-15605-1-4.html
  5. ::
  6. ::     GNU Awk 3.1.0
  7. ::     http://sourceforge.net/projects/unxutils/files/
  8. ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
  9. @echo off
  10. :: --------------------- 设置 ---------------------
  11. set "folder=e:\我的文档\桌面"
  12. set "filename=a.xml"
  13. set "str=xxxx"
  14. :: --------------------- /设置 ---------------------
  15. :: 创建文件列表
  16. dir /s /b "%folder%\%filename%" >.tmp
  17. :: 统计文件个数
  18. for /f %%a in (' find /c /v "" ^< .tmp ') do (
  19.     set /a total = %%a, count = 0
  20. )
  21. :: 替换
  22. for /f "delims=" %%a in (.tmp) do (
  23.     call :replace "%%a"
  24. )
  25. :: 退出
  26. set /p =处理完毕!按回车键退出. . . <nul
  27. pause >nul
  28. exit /b
  29. :replace
  30.     set /a count += 1
  31.     title %count% / %total%
  32.     echo %1
  33.    
  34.     gawk "{gsub(/%str%/,\"\n^&\")};{print}" FS="%str%" %1 | gawk "{sub(/%str%/,++n-1 \"^&\");print}" | sed -r ":a;N;$!ba;s/\n([0-9]+)%str%/\1/g" >.tmp
  35.    
  36.     move .tmp %1
  37.     goto :eof
复制代码
下载“gawk.exe sed.exe test.bat.zip”:
http://files.getwebb.org/view-cre63ai1.html

TOP

老大,我测试的时候提示 'gawk' 不是内部或外部命令,也不是可运行的程序
或批处理文件。怎么解决?

TOP

我先搜一下看看,对批处理十分不熟

TOP

回复 3# nicevoice


    需要下载 gawk 和 sed。代码的开头有下载地址。或者在代码的下面,我已经打包好了 gawk.exe sed.exe test.bat 这三个文件。

TOP

斑竹,我这个问题是悬赏的,我把赏金发给你,给我个支付宝吧

TOP

回复 6# nicevoice


    好。多谢。[email]tmplinshi@gmail.com[/email]

TOP

已转账,斑竹辛苦

TOP

本帖最后由 tmplinshi 于 2012-11-20 01:41 编辑
  1. @echo off
  2. :: --------------------- 设置 ---------------------
  3. set "folder=e:\我的文档\桌面"
  4. set "filename=a.xml"
  5. set "str=xxxx"
  6. :: --------------------- /设置 ---------------------
  7. :: 创建文件列表
  8. dir /s /b "%folder%\%filename%" >.tmp
  9. :: 统计文件个数
  10. for /f %%a in (' find /c /v "" ^< .tmp ') do (
  11.     set /a total = %%a, count = 0
  12. )
  13. :: 替换
  14. for /f "delims=" %%a in (.tmp) do (
  15.     call :replace "%%a"
  16. )
  17. :: 退出
  18. set /p =处理完毕!按回车键退出. . . <nul
  19. pause >nul
  20. exit /b
  21. :replace
  22.     set /a count += 1
  23.     title %count% / %total%
  24.     echo %1
  25.    
  26.     gawk -v n=-1 "{for (i = 1; i < NF; i++){++n; printf($i n)}; print $NF}" "FS=%str%" %1 >.tmp
  27.    
  28.     move .tmp %1
  29.     goto :eof
复制代码

TOP

返回列表