Board logo

标题: [文本处理] 能否批量修改TXT文件里指定的文件里的一个或多个关键字? [打印本页]

作者: hz328    时间: 2011-1-15 18:47     标题: 能否批量修改TXT文件里指定的文件里的一个或多个关键字?

新人,搜遍了整个论坛了,也没找着,只看到类似问法没答案。
问题如下:
TXT文本1.txt里记载的是

d:\a\1.html     //注释:此文件有关键字如:成人电影
d:\b\20.html  //注释:此文件有关键字如:手机
d:\p\15.html //注释:此文件有关键字如:迷香
我想利用批处理读取到这个1.txt文本里的地址文件,
然后修改这里文件里头的某个或者多个关键字比如:成人电影=科幻电影

最终希望的结果就是:
d:\a\1.html     
d:\b\20.html  
d:\p\15.html

TXT文体里的文件里没有了指定的关键字。

希望高手指点。谢谢了。
作者: tmplinshi    时间: 2011-1-15 23:16

  1. @echo off
  2. for /f "tokens=*" %%f in (1.txt) do (
  3.     findstr /n .* "%%f" >.tmp
  4.     (for /f "tokens=*" %%a in (.tmp) do (
  5.         set var=%%a
  6.         SetLocal EnableDelayedExpansion
  7.         set "var=!var:电影=科幻电影!"
  8.         set "var=!var:关键字2=替换后的字符!"
  9.         echo,!var:*:=!
  10.         EndLocal
  11.     )) >"%%f"
  12. )
  13. del .tmp
复制代码

[ 本帖最后由 tmplinshi 于 2011-1-15 23:18 编辑 ]
作者: batman    时间: 2011-1-16 13:08

我想应该首先建立一个文件名、关键字、替换内容间的对应关系,然后根据这一关系来进行批量替换和重写文件,代码如下,请楼主测试后使用:
  1. @echo off&setlocal enabledelayedexpansion
  2. rem 建立对应关系
  3. set "\a\1.html=成人电影"&set "\b\20.html=手机"&set "\p\15.html=迷香"
  4. set "_\a\1.html=替换一"&set "_\b\20.html=替换二"&set "_\p\15.html=替换三"
  5. rem 核心代码
  6. for /f "delims=" %%a in ('dir /b /s d:\*.html') do (
  7.     cd.>%%~dpatemp
  8.     for /f "usebackq delims=" %%b in ("%%a") do (
  9.         set "str=%%b"
  10.         for %%c in (!%%~pnxa!) do (
  11.             for %%d in (!_%%~pnxa!) do echo.!str:%%C=%%d!>>temp
  12.         )
  13.     )
  14.     del /q "%%a"&ren "%%~dpatemp" %%~nxa
  15. )
  16. echo 搞定。。。&pause>nul
复制代码

[ 本帖最后由 batman 于 2011-1-16 13:10 编辑 ]
作者: hz328    时间: 2011-1-16 18:22     标题: 回复 3楼 的帖子

关键字多了就麻烦。
我从中发现了一点就是,应该文本1.TXT存放含有关键字的文件地址。文本2.TXT里就存放着要替换的关键字。
这样一来能否接合一齐来呢?

文本1内容:           文本2内容:
               替换前    替换后
d:\a\1.html          成人电影;科幻电影
d:\b\20.html         手机;计算机
d:\p\15.html         迷香;香水
....                             ....
....                             ....

文本1的第一行就对应着文本2的第一行,
文本1的第二行就对应着文本2的第二行,
以此类推.
作者: hz328    时间: 2011-1-16 18:23     标题: 回复 2楼 的帖子

按你意思找不着这个。

>.tmp
作者: hanyeguxing    时间: 2011-1-16 18:59

  1. @echo off
  2. for /f "tokens=1,2* delims=|" %%a in ('more +13^<"%~f0"') do (
  3.     (for /f "usebackq delims=" %%d in ("%%a") do (
  4.         set "d=%%d"
  5.         setlocal enableDelayedExpansion
  6.         set "d=!d:%%b=%%c!"
  7.         echo/!d!
  8.         Endlocal
  9.     ))>temp
  10.     move temp "%%a"
  11. )
  12. exit
  13. :列表
  14. d:\a\1.html|成人电影|科幻电影
  15. d:\b\20.html|手机|计算机
  16. d:\p\15.html|迷香|香水
复制代码
fr.exe 下载地址:http://ishare.iask.sina.com.cn/f/7088512.html
  1. @echo off
  2. for /f "tokens=1,2* delims=|" %%a in ('more +4^<"%~f0"') do fr.exe "%%a" /fic:"%%b" /t:"%%c"
  3. exit
  4. :列表
  5. d:\a\1.html|成人电影|科幻电影
  6. d:\b\20.html|手机|计算机
  7. d:\p\15.html|迷香|香水
复制代码

[ 本帖最后由 hanyeguxing 于 2011-1-16 19:24 编辑 ]




欢迎光临 批处理之家 (http://bbs.bathome.net/) Powered by Discuz! 7.2