标题: [文本处理] [已解决]如何让批处理替换拥有空格代码的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完成。代码直接修改,使用前备份文件:- @echo off
- for /f "delims=" %%i in ('dir /s/b *.html *.htm') do (
- 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"
- )
- 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学起来确实比较麻烦。恰好有些时间给你解释一下:
- # 在含有347的行处理
- /347/{
- # border=1 改为 border=0
- #\x27是单引号
- #\1、\2是反向引用
- #s/a/b/ 用b替换a
- s/\(border=\x27\)1\(\x27\)/\10\2/;
- # spacing=0 改为 spacing =1
- s/\(spacing=\x27\)0\(\x27\)/\11\2/
- }
- # 在含有345的行处理
- /345/{
- # 更改颜色
- s/#000000/#00E3E3/
- }
- /.styleA/{
- # 下略
- s/\(.styleA.*}\)\(body\)/\1.styleB {font-size: 10pt;font-weight: bold;}\2/
- }
复制代码
其实可以使用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://www.bathome.net/) |
Powered by Discuz! 7.2 |