Board logo

标题: [文件操作] [已解决]批处理怎样根据网页文件<title>间的标题重命名文件? [打印本页]

作者: huzhiqiang91    时间: 2013-7-10 19:33     标题: [已解决]批处理怎样根据网页文件<title>间的标题重命名文件?

我有许多以数字开头的htm文件,如35003.htm,网页的内容是一些文章,是有标题的,如“如何保养电脑与维护”等,
但是网页文件的数字标题对我找寻相关文章很不利,后来我发现在htm文件的源码里,文章的题目都在<title></title>之间,我现在想提取<title></title>之间的文章名并以此重命名该文件,不知代码该怎么写
备注:其实我自己尝试写过,但提取的都带<title></title>,我不想要,但是自己造诣不深搞不定,求高手。注意:我有很多很多这样的文件,希望代码有通用性,谢谢
作者: terse    时间: 2013-7-10 20:09

想看看你是怎么提取的
作者: Python    时间: 2013-7-10 20:39

请把35003.htm压缩一下传上来看看
还有把你的代码也贴出来
我可以帮忙修改
作者: huzhiqiang91    时间: 2013-7-10 23:34

这是我写的代码,
  1. @echo off
  2. findstr "<title>" "*.htm" >list.txt
  3. for /f "delims=: tokens=1,2" %%a (list.txt) do (
  4. ren F:\test\%%a %%b)
  5. pause
复制代码
这是网页文件,用记事本打开看源码就找到<title></title>间的文章名了,我换了个文件,形式是一样的,内容不一样,
备注:有的文章名有空格或是特殊字符
作者: terse    时间: 2013-7-11 10:22

本帖最后由 terse 于 2013-7-11 12:56 编辑

路径自己补上  特殊字符没测试 空格应该没问题
n参数这里是多余了
  1. @echo off
  2. set ext=htm
  3. for /f "tokens=1,3 delims=:<>" %%a in ('findstr /i "<title>.*</title>" *.%ext%') do ren "%%a" "%%b.%ext%"
  4. pause
复制代码

作者: huzhiqiang91    时间: 2013-7-11 17:01

本帖最后由 huzhiqiang91 于 2013-7-11 17:03 编辑

问题解决了,谢谢terse ,不过我有一个问题
  1. for /f "tokens=1,3 delims=:<>" %%a in ('findstr /i "<title>.*</title>" *.%ext%') do ren "%%a" "%%b.%ext%
复制代码
上面这段代码为什么把
  1. 'findstr /i "<title>.*</title>" *.%ext%
复制代码
的结果:
  1. 33428.htm:<title>windows IE浏览器精典技巧两则_WindowsXP_脚本之家</title>
复制代码
分成了4段,而不是五段,难道33428.htm:<title>冒号和"<"之间无字符段就不算吗,换句话说,是不是在两个分隔符之间无字符是不是就不分割呢、
作者: huzhiqiang91    时间: 2013-7-11 17:12

刚才又大规模试了一下,发现有特殊字符的不行,不过已经解决很大问题了,我觉得在处理前把含有的特殊字符找出来,替换掉应该可以,自己试试吧,再次感谢
作者: CrLf    时间: 2013-7-11 18:47

批处理吧某人的办法是这样,需要用第三方 sed:
  1. @echo off
  2. set "ext=htm"
  3. findstr /i "<title>.*</title>" *.%ext%>a.txt
  4. (
  5. echo @echo off
  6. sed "s/\(.*\):.*<title>\([^<]*\)<.*/ren \"\1\" \"\2.%ext%\"/ig" a.txt
  7. )>a.bat
  8. call a.bat
  9. pause
复制代码

作者: PowerShell    时间: 2013-7-13 22:25

本帖最后由 PowerShell 于 2013-7-13 22:42 编辑

我也来凑热闹了 用时,别忘了把f:\txt那块修改了,并把#给取消掉。并备份下源文件
  1. foreach ($a in (Get-ChildItem f:\TXT\aaa\*.htm*  -Recurse) )
  2. {
  3. $整个标题行 = Get-Content $a   |  select-string -list  -Pattern  "<title>.*</title>"  
  4. if  ($整个标题行 -ne $null)
  5. {
  6. $网页最终标题   = $整个标题行 -replace "^.*<title>",""
  7. $网页最终标题   = $网页最终标题 -replace "</title>.*$",""
  8. write-host $a.fullname,"---",$网页最终标题
  9. #Rename-Item   $a  $网页最终标题
  10. $整个标题行 = $null
  11. }
  12. else
  13. {
  14. Write-Warning  $a.fullname
  15. }
  16. }
  17. #powershell好,语法简单,无需转义,特殊字符处理妙,
复制代码





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