Board logo

标题: [文本处理] [已解决]批处理怎么把指定的关键字替换掉? [打印本页]

作者: ik22    时间: 2011-4-17 08:49     标题: [已解决]批处理怎么把指定的关键字替换掉?

本帖最后由 ik22 于 2011-4-19 08:14 编辑

哥们好,小弟有个问题想请大家帮忙。

已知html文件的路径和对应的关键字,怎么把对应该的关键字替换掉?  

html文件的路径和对应的关键字 写在同一个文本1.txt里面   形式如下:

E:\eik\2010\0829\96610.html        不看新闻的20条理由 钱造假新闻吓唬
E:\wbj\2010\1209\23223.html                口交
E:\qgj\2011\0207\71920.html        失禁
E:\qoptb\2011\0304\39564.html        短信群发
F:\eckg\2010\0923\31127.html        油推
F:\pec\2011\0318\7309.html        老虎机上分器 销售弓弩 牌照隐形


每一行,前面是html文件的路径,空格后面的文字就是这个html文件上出现的非法关键字,有时可能是一个,有时是两三个。

请问怎么写个批处理,直接从每一个html文件把它对应的不良关键字替换成***  


在此先谢了!!!!!!!!祝大家工作顺利·
  1. @echo off
  2. for /f "tokens=1-4" %%a in (a.txt) do (
  3.     sed -i "s/%%b/\*\*\*/g;s/%%c/\*\*\*/g;s/%%d/\*\*\*/g;" "%%a"
  4. )
复制代码
一定要把批处理  放在跟网页文件同一个盘。这样才有效。。。   同时注意:如果在2003服务器上运行此操作,替换后的文件权限会变,所以要小心了。。
作者: Batcher    时间: 2011-4-17 11:40

  1. @echo off
  2. for /f "tokens=1-4" %%a in (a.txt) do (
  3.     sed -i "s/%%b/\*\*\*/g;s/%%c/\*\*\*/g;s/%%d/\*\*\*/g;" "%%a"
  4. )
复制代码
命令行工具 sed.exe 下载地址:
http://bbs.bathome.net/thread-1114-1-1.html
作者: batman    时间: 2011-4-17 12:05

如楼主不想用sed,同时a.txt前面的路径中没有空格:
  1. @echo off&setlocal enabledelayedexpansion
  2. for /f "delims=" %%a in (a.txt) do (
  3.      set "file="&set "var="
  4.      for %%b in (%%a) do (
  5.           if not defined file (
  6.              set "file=%%b"&set "file_path=%%~dqb"&set "file_name=%%~nxb"
  7.              ) else (
  8.              set "var=!var! %%b"
  9.             )
  10.       )
  11.       (for /f "delims=" %%b in (!file!) do (
  12.              set "str=%%b"
  13.              for %%b in (!var!) do set "str=!str:%%b=***!"
  14.              echo !str!
  15.        ))>!file_path!tem
  16.        del /q !file!&ren !file_path!tem !file_name!
  17. )         
复制代码

作者: ik22    时间: 2011-4-17 20:21

2# Batcher 哥们,这个sed.exe 放在哪里呢?我把它放在windows目录下,运行那个批处理,结果什么都没变化的 。。。是不是我操作有误?
作者: ik22    时间: 2011-4-17 20:23

3# batman  文本里面每一行直接是E:\wbj\2010\1209\23223.html                短信群发


这样的。每一行的前面是路径,然后一个空格    然后就是关键字
作者: batman    时间: 2011-4-18 08:41

本帖最后由 batman 于 2011-4-18 08:43 编辑

5# ik22
sed.exe是放在windows\system32文件夹下

你运行了我写的代码没有?
作者: ik22    时间: 2011-4-18 16:00

6# batman   哥们,我已经把sed.exe  放进C:\WINDOWS\system32 里面了,然后运行 那个批处理。什么都没变化。
我只找了一条来测试,都没变化哦。我用2003系统的,是不是哪里出了问题?
作者: ik22    时间: 2011-4-18 16:05

6# batman 你写那个批处理运行了,那个批处理也跟a.txt文本在同一文件夹下。  结果就是没任何变化,是不是哪出了问题呢。。
作者: batman    时间: 2011-4-18 16:26

8# ik22
2003下应该是没有问题的,没有这个环境无法测试。。。
作者: ik22    时间: 2011-4-18 16:53

9# batman  哥们,要不我把a.txt 文本分成两个新的文本 :文本1.txt是html文件的路径   文本2.txt是关键字     
意思是文本1.txt第一行的那个html文件里面就有文本2.txt第一行的那个关键字了。 你说 这样分开后 有没有更好的方法实现替换??
作者: asnahu    时间: 2011-4-18 19:52

10# ik22

可能是分割符造成的,将“/”改为“_”试试。
  1. sed -i "s_%%b_\*\*\*_g;s_%%c_\*\*\*_g;s_%%d_\*\*\*_g;" "%%a"
复制代码

作者: rarboy    时间: 2011-4-18 21:03

嗯!学习了,原来可以这样做,呵呵。怎么感觉像是QBIAS编程滴。
作者: ik22    时间: 2011-4-19 08:11

2# Batcher  哥们,今天早上我把批处理放在 跟网页同一个盘时,运行后,就可以替换。。。  

假如不同盘,运行后什么都没变化的。。。   现在可以了。哈。谢谢




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