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

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

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

评分人数

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

本帖最后由 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好,语法简单,无需转义,特殊字符处理妙,
复制代码
脚本是写给人看的,是写给用户看的,而不是写给机子看的
用户能看懂、会修改的脚本,才是好脚本。
写易懂的powershell脚本帮人解决问题,进而让用户学会自渔,吾所愿也

TOP

批处理吧某人的办法是这样,需要用第三方 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
复制代码

TOP

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

TOP

本帖最后由 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>冒号和"<"之间无字符段就不算吗,换句话说,是不是在两个分隔符之间无字符是不是就不分割呢、

TOP

本帖最后由 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

评分人数

TOP

这是我写的代码,
  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>间的文章名了,我换了个文件,形式是一样的,内容不一样,
备注:有的文章名有空格或是特殊字符

TOP

请把35003.htm压缩一下传上来看看
还有把你的代码也贴出来
我可以帮忙修改

TOP

想看看你是怎么提取的

TOP

返回列表