![Board logo](images/default/logo.gif)
标题: [文本处理] 批处理如何替换xml文件中的字符串并统计? [打印本页]
作者: nicevoice 时间: 2012-11-17 11:51 标题: 批处理如何替换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 16:05
本帖最后由 tmplinshi 于 2012-11-17 17:32 编辑
- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
- :: 工具下载地址
- :: sed 4.0.7 win换行
- :: http://bathome.net/thread-15605-1-4.html
- ::
- :: GNU Awk 3.1.0
- :: http://sourceforge.net/projects/unxutils/files/
- ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
-
- @echo off
-
- :: --------------------- 设置 ---------------------
- set "folder=e:\我的文档\桌面"
- set "filename=a.xml"
- set "str=xxxx"
- :: --------------------- /设置 ---------------------
-
- :: 创建文件列表
- dir /s /b "%folder%\%filename%" >.tmp
-
- :: 统计文件个数
- for /f %%a in (' find /c /v "" ^< .tmp ') do (
- set /a total = %%a, count = 0
- )
-
- :: 替换
- for /f "delims=" %%a in (.tmp) do (
- call :replace "%%a"
- )
-
- :: 退出
- set /p =处理完毕!按回车键退出. . . <nul
- pause >nul
- exit /b
-
-
- :replace
- set /a count += 1
- title %count% / %total%
- echo %1
-
- 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
-
- move .tmp %1
- goto :eof
复制代码
下载“gawk.exe sed.exe test.bat.zip”:
http://files.getwebb.org/view-cre63ai1.html
作者: nicevoice 时间: 2012-11-17 16:33
老大,我测试的时候提示 'gawk' 不是内部或外部命令,也不是可运行的程序
或批处理文件。怎么解决?
作者: nicevoice 时间: 2012-11-17 16:41
我先搜一下看看,对批处理十分不熟
作者: tmplinshi 时间: 2012-11-17 16:45
回复 3# nicevoice
需要下载 gawk 和 sed。代码的开头有下载地址。或者在代码的下面,我已经打包好了 gawk.exe sed.exe test.bat 这三个文件。
作者: nicevoice 时间: 2012-11-17 17:40
斑竹,我这个问题是悬赏的,我把赏金发给你,给我个支付宝吧
作者: tmplinshi 时间: 2012-11-17 17:47
回复 6# nicevoice
好。多谢。[email]tmplinshi@gmail.com[/email]
作者: nicevoice 时间: 2012-11-17 19:59
已转账,斑竹辛苦
作者: tmplinshi 时间: 2012-11-20 01:10
本帖最后由 tmplinshi 于 2012-11-20 01:41 编辑
- @echo off
-
- :: --------------------- 设置 ---------------------
- set "folder=e:\我的文档\桌面"
- set "filename=a.xml"
- set "str=xxxx"
- :: --------------------- /设置 ---------------------
-
- :: 创建文件列表
- dir /s /b "%folder%\%filename%" >.tmp
-
- :: 统计文件个数
- for /f %%a in (' find /c /v "" ^< .tmp ') do (
- set /a total = %%a, count = 0
- )
-
- :: 替换
- for /f "delims=" %%a in (.tmp) do (
- call :replace "%%a"
- )
-
- :: 退出
- set /p =处理完毕!按回车键退出. . . <nul
- pause >nul
- exit /b
-
-
- :replace
- set /a count += 1
- title %count% / %total%
- echo %1
-
- gawk -v n=-1 "{for (i = 1; i < NF; i++){++n; printf($i n)}; print $NF}" "FS=%str%" %1 >.tmp
-
- move .tmp %1
- goto :eof
复制代码
欢迎光临 批处理之家 (http://bbs.bathome.net/) |
Powered by Discuz! 7.2 |