Board logo

标题: [文本处理] [已解决]如何让批处理替换拥有空格代码的htm文件? [打印本页]

作者: scyz2008    时间: 2010-9-10 16:52     标题: [已解决]如何让批处理替换拥有空格代码的htm文件?

一个目录下拥有很多个子目录,子目录存有几百个htm类的网页文件,里面的网页文件,我想去掉里面的一些内容换成自己的内容,而这些替换的代码拥有很多空格,请问能用批处理实现吗
例1.:
这是要源文件中的内容:
<table width='347' border='1' align='center' cellpadding='0' cellspacing='0'

这是要更改后的内容:
<table width='347' border='0' align='center' cellpadding='0' cellspacing='1'

例2.:这是要源文件中的内容:
bordercolor='#000000' style='border-collapse: collapse'>

这是要更改后的内容:
bordercolor='#00E3E3' style='border-collapse: collapse'>


看了以上的例子也许你会说,不用替换那样多了,只替换有变换的几个字符即可以了
但是你要知道一个网页文件中有很多地方是重复那几个字符的,我不想更改其它的地方,只需要更改一个地方
比如例2:
源文件'#000000' 与更改后'#00E3E3' 只有这个字符不一样而以,但是我不需要让批外理只更改这几个字符的
要更改全部,才能达到网页文件其它重复的地方不更改
网页文件不能上传只能贴出来下面附件有两个改成为TXT的源文件,这是源文件

[ 本帖最后由 scyz2008 于 2010-9-22 00:18 编辑 ]
作者: scyz2008    时间: 2010-9-11 11:51

<table width='347' border='1' align='center' cellpadding='0' cellspacing='0'   这里是要在源文件中查找到的代码
<table width='347' border='0' align='center' cellpadding='0' cellspacing='1'   这里是要更改后的效果

bordercolor='#000000' style='border-collapse: collapse'> 这里是要在源文件中查找到的代码
bordercolor='#00E3E3' style='border-collapse: collapse'>  这里是要更改后的效果

.styleA {font-size: 9pt;font-weight: bold;}
.styleA {font-size: 9pt;font-weight: bold;}.styleB {font-size: 10pt;font-weight: bold;}

[ 本帖最后由 scyz2008 于 2010-9-14 11:44 编辑 ]
作者: asnahu    时间: 2010-9-11 12:19

问题表述不清,最好发个源文件。
作者: scyz2008    时间: 2010-9-11 18:15

好的,马上上源文件给你
作者: Batcher    时间: 2010-9-11 19:52     标题: 回复 2楼 的帖子

这么简单的问题岂有搞不定的道理?
作者: 523066680    时间: 2010-9-14 11:50

一看就是个网管,成人片……
作者: scyz2008    时间: 2010-9-14 13:09

不是成人片
是我用前辈所写的软件,电影信息收集,对硬盘内电影进行整理,做成网页模式,然后在其它客户端输入服务器地址即可以实现观看的效果
作者: asnahu    时间: 2010-9-16 19:59

借助sed完成。代码直接修改,使用前备份文件:
  1. @echo off
  2. for /f "delims=" %%i in ('dir /s/b *.html *.htm') do (
  3.         sed -i "/347/{s/\(border=\x27\)1\(\x27\)/\10\2/; s/\(spacing=\x27\)0\(\x27\)/\11\2/}; /345/{s/#000000/#00E3E3/}; /.styleA/{s/\(.styleA.*}\)\(body\)/\1.styleB {font-size: 10pt;font-weight: bold;}\2/}" "%%i"
  4.         )
  5. exit
复制代码


另外,代码产生一点临时文件,需要删除,如果不想手动的话,那么学点批处理吧。答案就在以上的代码中。

[ 本帖最后由 asnahu 于 2010-9-16 20:06 编辑 ]
作者: scyz2008    时间: 2010-9-17 10:54

试了一下不是很理想,不过想问一下有没有更直接一点的办法
作者: Batcher    时间: 2010-9-17 11:50     标题: 回复 9楼 的帖子

告诉他哪里不理想,让他帮你改进。
作者: asnahu    时间: 2010-9-17 11:54

怎么个不理想,是不能替换?从给的测试文件来看,可以实现替换。如果要用直接的方式,可以考虑用vim,就正则来说vim是最理想的。
作者: scyz2008    时间: 2010-9-20 20:32

他的答案是好,但是要用到的东西太复杂,不太好根据他的思路写出另外的修改代码,因为我的文件改动的地方是不一样的,
作者: scyz2008    时间: 2010-9-20 20:34

看了半天也不理解他的代码是什么意思,不过试了一下,还行,谢谢了
希望asnahu能最好写点注释语言,让我们初学者更快的看懂
作者: Batcher    时间: 2010-9-20 21:02     标题: 回复 13楼 的帖子

哪里不懂尽管问,让他给你讲。
作者: asnahu    时间: 2010-9-20 22:08

如文件修改的地方不同,建议分批处理。sed学起来确实比较麻烦。恰好有些时间给你解释一下:
  1. # 在含有347的行处理
  2. /347/{
  3.     # border=1 改为 border=0
  4.     #\x27是单引号
  5.     #\1、\2是反向引用
  6.     #s/a/b/ 用b替换a
  7.     s/\(border=\x27\)1\(\x27\)/\10\2/;
  8.     # spacing=0 改为 spacing =1
  9.     s/\(spacing=\x27\)0\(\x27\)/\11\2/
  10.     }
  11. # 在含有345的行处理
  12. /345/{
  13.     # 更改颜色
  14.     s/#000000/#00E3E3/
  15.     }
  16. /.styleA/{
  17.     # 下略
  18.     s/\(.styleA.*}\)\(body\)/\1.styleB {font-size: 10pt;font-weight: bold;}\2/
  19.     }
复制代码


其实可以使用sed脚本代替单行命令,将以上内容做成脚本用-f参数调用也行。正则部分还可以精简。

[ 本帖最后由 asnahu 于 2010-9-20 22:18 编辑 ]
作者: scyz2008    时间: 2010-9-22 00:17

人笨,没有办法,sed命令没有办法懂,不过试了你的代码,确实可以,谢谢你的热心
有空多联系,QQ8541218
作者: Batcher    时间: 2010-9-22 00:52     标题: 回复 16楼 的帖子

可以考虑加论坛的QQ群




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