找回密码
 注册
搜索
[新手上路]批处理新手入门导读[视频教程]批处理基础视频教程[视频教程]VBS基础视频教程[批处理精品]批处理版照片整理器
[批处理精品]纯批处理备份&还原驱动[批处理精品]CMD命令50条不能说的秘密[在线下载]第三方命令行工具[在线帮助]VBScript / JScript 在线参考
查看: 31507|回复: 8

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

[复制链接]
发表于 2013-7-10 19:33:53 | 显示全部楼层 |阅读模式
我有许多以数字开头的htm文件,如35003.htm,网页的内容是一些文章,是有标题的,如“如何保养电脑与维护”等,
但是网页文件的数字标题对我找寻相关文章很不利,后来我发现在htm文件的源码里,文章的题目都在<title></title>之间,我现在想提取<title></title>之间的文章名并以此重命名该文件,不知代码该怎么写
备注:其实我自己尝试写过,但提取的都带<title></title>,我不想要,但是自己造诣不深搞不定,求高手。注意:我有很多很多这样的文件,希望代码有通用性,谢谢

评分

参与人数 1PB +2 收起 理由
Batcher + 2 感谢给帖子标题标注[已解决]字样

查看全部评分

发表于 2013-7-10 20:09:04 | 显示全部楼层
想看看你是怎么提取的
发表于 2013-7-10 20:39:43 | 显示全部楼层
请把35003.htm压缩一下传上来看看
还有把你的代码也贴出来
我可以帮忙修改
 楼主| 发表于 2013-7-10 23:34:08 | 显示全部楼层
这是我写的代码,
  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>间的文章名了,我换了个文件,形式是一样的,内容不一样,
备注:有的文章名有空格或是特殊字符
发表于 2013-7-11 10:22:16 | 显示全部楼层
本帖最后由 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
复制代码

评分

参与人数 1技术 +1 收起 理由
Batcher + 1 乐于助人

查看全部评分

 楼主| 发表于 2013-7-11 17:01:30 | 显示全部楼层
本帖最后由 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>冒号和"<"之间无字符段就不算吗,换句话说,是不是在两个分隔符之间无字符是不是就不分割呢、
 楼主| 发表于 2013-7-11 17:12:57 | 显示全部楼层
刚才又大规模试了一下,发现有特殊字符的不行,不过已经解决很大问题了,我觉得在处理前把含有的特殊字符找出来,替换掉应该可以,自己试试吧,再次感谢
发表于 2013-7-11 18:47:49 | 显示全部楼层
批处理吧某人的办法是这样,需要用第三方 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
复制代码
发表于 2013-7-13 22:25:04 | 显示全部楼层
本帖最后由 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好,语法简单,无需转义,特殊字符处理妙,


复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|小黑屋|批处理之家 ( 渝ICP备10000708号 )

GMT+8, 2026-3-20 11:24 , Processed in 0.021729 second(s), 9 queries , File On.

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表