[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
返回列表 发帖

[文本处理] [已解决]如何让批处理替换拥有空格代码的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 编辑 ]
1

评分人数

    • Batcher: 感谢给帖子标题标注[已解决]字样PB + 2

<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 编辑 ]

TOP

问题表述不清,最好发个源文件。

TOP

好的,马上上源文件给你

TOP

回复 2楼 的帖子

这么简单的问题岂有搞不定的道理?
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

一看就是个网管,成人片……

TOP

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

TOP

借助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 编辑 ]
1

评分人数

TOP

试了一下不是很理想,不过想问一下有没有更直接一点的办法

TOP

回复 9楼 的帖子

告诉他哪里不理想,让他帮你改进。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

怎么个不理想,是不能替换?从给的测试文件来看,可以实现替换。如果要用直接的方式,可以考虑用vim,就正则来说vim是最理想的。

TOP

他的答案是好,但是要用到的东西太复杂,不太好根据他的思路写出另外的修改代码,因为我的文件改动的地方是不一样的,

TOP

看了半天也不理解他的代码是什么意思,不过试了一下,还行,谢谢了
希望asnahu能最好写点注释语言,让我们初学者更快的看懂

TOP

回复 13楼 的帖子

哪里不懂尽管问,让他给你讲。
我帮忙写的代码不需要付钱。如果一定要给,请在微信群或QQ群发给大家吧。
【微信公众号、微信群、QQ群】http://bbs.bathome.net/thread-3473-1-1.html
【支持批处理之家,加入VIP会员!】http://bbs.bathome.net/thread-67716-1-1.html

TOP

如文件修改的地方不同,建议分批处理。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 编辑 ]

TOP

返回列表